我已经可以在public:
头中定义具有固定参数类型的函数指针向量,然后在构造函数中对其进行更新。但是,如果我希望能够传递带有任何类型参数的函数指针向量,那么在构造函数更新它之前如何定义它?
#include <iostream>
#include <vector>
class foo {
public:
std::vector<void (*)(int)> functions;
foo(std::vector<void (*)(int)> x) {
functions=x;
}
void run() {
functions[0](2);
}
};
void square(int n) { std::cout << n*n; }
int main() {
foo* bar=new foo(std::vector<void (*)(int)>{square});
bar->run();
return 0;
}
现在,如何将向量传递给任何类型的构造函数?
//snippet from above
std::vector<void (*)()> functions; //what do i do here?
template <typename T>
foo(std::vector<void (*)(T)> x) { //this works fine
functions=x;
}
答案 0 :(得分:3)
您可以将班级改为班级模板
template<class T>
class foo {
public:
std::vector<void (*)(T)> functions;
foo(std::vector<void (*)(T)> x) : functions(x)
{ }
...
}
foo<int>* bar=new foo(std::vector<void (*)(int)>{square});
我还建议您从函数指针切换到std::function,并且不要使用原始指针。使用std::unique_ptr或其表亲之一。