存储各种空函数指针及其参数的向量
Storing a vector of various void function pointers with its parameters
我正在寻找一种将函数指针存储在容器(如向量)中的方法。如果所有函数都具有相同的参数,这是可能的,但如果函数具有单独唯一的参数,我可以这样做吗?
#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
VS 2103 有 std::function
、std::bind
和 lambda。只需使用它们。
犯了一个不包含的错误,因为我在任何人的代码示例中都看不到它,但这可能只是我不擅长 C++。
不打算接受我自己的回答,但认为我 post 我的代码只是为了任何可能觉得它有用的人的利益。
#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
}
}
我正在寻找一种将函数指针存储在容器(如向量)中的方法。如果所有函数都具有相同的参数,这是可能的,但如果函数具有单独唯一的参数,我可以这样做吗?
#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
VS 2103 有 std::function
、std::bind
和 lambda。只需使用它们。
犯了一个不包含的错误,因为我在任何人的代码示例中都看不到它,但这可能只是我不擅长 C++。
不打算接受我自己的回答,但认为我 post 我的代码只是为了任何可能觉得它有用的人的利益。
#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
}
}