正如@hmjd 所说,您可以使用boost::tuples
,但是如果您想在存储的函数的数量和类型上有更多的自由,您应该将普通容器(std::vector
例如)与boost::any结合使用。
它是这样的:
typedef boost::function<void(PARAM_LIST1)> Func1;
typedef boost::function<void(PARAM_LIST2)> Func2;
typedef boost::function<void(PARAM_LIST3)> Func3;
...
std::vector< boost::any > functions;
functions.push_back(Func1(actualFunc1));
functions.push_back(Func2(actualFunc2));
functions.push_back(Func3(actualFunc3));
...
它用于为每个函数转换确切的类型:
Func1 & f1 = boost::any_cast< Func1 >(functions[0]);
f1(...) //actual usage
Func2 & f2 = boost::any_cast< Func2 >(functions[1]);
f1(...) //actual usage
甚至直接:
boost::any_cast< Func3 >(functions[2])(...) //actual usage