将函数放入向量并执行

Tho*_*ees 7 c++ vector c++11

我想将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)