我正在寻找一种方法来将函数指针存储在像vector这样的容器中。如果所有函数具有相同的参数,但是如果函数具有单独的唯一参数,我可以这样做吗?
#include <iostream>
#include <vector>
using namespace std;
void sayHi() {
cout << "Hi" << endl;
}
void sayNum(int num) {
cout << num << endl;
}
int main() {
vector<void(*)()> funcs; // vector of 0 argument functions
funcs.push_back(sayHi);
funcs.push_back(sayNum); // can't store sayNum because it takes arguments
}
请注意,我不能使用std :: function或std :: bind,因为VS2013没有它们,我宁愿不使用boost库。解决方案必须允许迭代函数指针的向量,并使用一些有效的参数执行每一个。
原谅我对函数指针如何工作的潜在无知,我很习惯在Javascript中用一种语句做这种事情:P
答案 0 :(得分:1)
错误的不包括,因为我在任何人的代码示例中都没有看到它,但可能只是我在C ++上不好。
不接受我自己的回答,但我认为我发布我的代码只是为了任何可能发现它有用的人的利益。
#include <iostream>
#include <vector>
#include <functional>
using namespace std;
typedef std::vector<std::function<void(void)>> f_list;
f_list f1;
void _sayHi();
void _sayNum(int num);
void sayHi() {
f1.push_back(
std::bind(&_sayHi)
);
}
void sayNum(int num) {
f1.push_back(
std::bind(&_sayNum, num)
);
}
void _sayHi() {
cout << "hi" << endl;
}
void _sayNum(int num) {
cout << num << endl;
}
int main() {
sayHi();
sayNum(5);
for (int i = 0; i < f1.size(); i++) {
f1.at(i)(); // will execute desired functions
}
}
答案 1 :(得分:0)
VS 2103有std::function
,std::bind
和lambdas。只需使用它们。