我想将vector/deque作为函数容器.
这种包含必须使用不同的参数来执行不同的函数.
示例功能:
program_data::getInstance().function(int,std::string);
program_data::getInstance().foo(int);
program_data::getInstance().exam(int,std::string,double);
Run Code Online (Sandbox Code Playgroud)
你能举例说明如何将这些函数与std :: vector/std :: deque和execute的参数放在一起吗?
我认为我应该使用std :: function和std :: bind但我不知道如何使用不同的args大小来支持不同的函数.
使用参数 - >我的函数(调用function foo examfrom program_data)使用参数执行一些操作.
例如:通常我执行此功能:
program_data::getInstance().function(10,"halo");
现在我想将这些函数放入std::vector // deque并执行带有函数的参数.ie(如果我将函数放在向量上面并使用(伪代码)vector[0].run();那么我的程序运行函数program_data::getInstance().function(int,std::string);)
eca*_*mur 11
绝对地,使用std::vector<std::function<void()>>- 也就是说,类型擦除函数容器的向量,可以保存任何可以不带参数调用的对象:
std::vector<std::function<void()>> vector;
// populate the vector
vector.push_back([]{ program_data::getInstance().function(10,"halo"); });
// execute items in the vector
vector[0]();
Run Code Online (Sandbox Code Playgroud)
在这里,我用无捕捉的lambda填充向量; 您还可以将lambdas与capture,bind-expressions(std::bind)和其他可调用对象一起使用.
如果将lambda与捕获一起使用,则需要确保捕获的变量按值捕获或具有包含可调用集合的生命周期:
std::string tmp;
vector.push_back([&tmp]{ program_data::getInstance().something(tmp); });
Run Code Online (Sandbox Code Playgroud)