【发布时间】:2013-06-05 16:41:25
【问题描述】:
是否可以在不提前知道模板参数的情况下接受两种不同类型的 lambda 函数作为类成员?
struct two_functors {
std::function<???> a;
std::function<???> b;
...
};
这样的事情是可能的:
void main(){
vector<two_functors> many_functors;
int a = 2;
int b = 3;
double c = 4.7;
double d = 8.4;
two_functors add_and_subtract;
add_and_subtract.a = [a, b](int x, int y){cout << x + y << endl;};
add_and_subtract.b = [c, d](double x, double y){cout << x - y << endl;};
two_functors multiply_and_divide;
multiply_and_divide.a = [c, d](double x, double y){cout << x * y << endl;};
multiply_and_divide.b = [a, b](int x, int y){cout << x / y << endl;};
many_functors.push_back(add_and_subtract);
many_functors.push_back(multiply_and_divide);
for (auto functors : many_functors){
functors.a();
functors.b();
}
}
【问题讨论】:
-
可以使用模板完成,我希望...
-
two_functors可以作为类模板吗?如果没有一些参数作为x、y和s传递,add_and_print.a()和add_and_print.b()不正确吗? -
需要提前声明某些东西的唯一原因是其他东西是否使用它。因此,您希望某些语句使用
add_and_print而不知道它包含什么?你有一个你想要做什么的例子吗? -
嵌套可能无关紧要。您可以将类模板嵌套在非模板类中。
-
如果没有大量的包装和参数检查代码,就不可能使具有不同参数类型的函子容器有用。