存储各种void函数指针的向量及其参数

时间:2015-01-11 00:02:36

标签: c++ function vector function-pointers

我正在寻找一种方法来将函数指针存储在像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

2 个答案:

答案 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::functionstd::bind和lambdas。只需使用它们。