我正在尝试创建函数库。我创建了四个文件:
Function.hpp, Function.cpp, FunctionsRepository.hpp, FunctionsRepository.cpp
我希望pointers
保留vector
指针中的函数。
// FunctionsRepository.hpp
#ifndef FUNCTIONSREPOSITORY_HPP
#define FUNCTIONSREPOSITORY_HPP
#include <vector>
using namespace std;
class FunctionsRepository {
private:
static vector<double *> pointerToFunctions;
public:
static void addFunction(double * wsk);
};
#endif
// FunctionRepository.cpp
#include "FunctionsRepository.hpp"
void FunctionsRepository::addFunction(double * wsk) {
pointerToFunctions.push_back(wsk);
}
// Functions.hpp
#ifndef FUNCTIONS_HPP
#define FUNCTOINS_HPP
#include "FunctionsRepository.hpp"
int constFunction(int numberOfVehicles);
void linearFunction();
void stepFunction();
#endif
// Funcctions.cpp
#include "Functions.hpp"
double constFunction(double numberOfVehicles){
return numberOfVehicles/2;
}
double (*funcConstant)(double) = constFunction;
//ERROR HERE
FunctionsRepository::addFunction(funcConstant);
我希望尽可能轻松地添加新功能,并在程序的其他部分使用它。
但我不明白。为什么我收到此错误。 addFunction()
方法是静态的,这意味着我可以在其他类或程序的一部分中使用它。 Vector是static
,以确保它是整个程序的唯一副本。
答案 0 :(得分:0)
使用函数包装器。 std :: function可以存储可调用对象。因此,您的代码将包含以下内容:
class FunctionsRepository {
private:
// void() - function prototype
static std::vector<std::function<void()>> pointerToFunctions;
public:
static void addFunction(std::function<void()> wsk)
{
pointerToFunctions.push_back(wsk);
}
};
有关详细信息,请参阅官方文档:http://en.cppreference.com/w/cpp/utility/functional/function
答案 1 :(得分:0)
我解决了它。我收到一个错误,因为我在任何范围内调用FunctionsRepository::addFunction(funcConstant);
表达式。我刚刚创建了新函数来执行这个命令,这就是全部。