C++1y 提供多态 lambda(即,auto
作为参数类型的一部分使用):
int f(int);
double f(double);
std::string f(const std::string&);
auto funcObj = [](const auto& param){ return f(param); }
存储 lambda 生成的闭包很容易,如图所示:只需使用一个auto
变量。但是假设我想创建一个vector
这样的对象。vector
持有什么类型的?通常的答案是使用std::function
,但这在这种情况下不起作用,因为 AFAIK 没有 polymorphic 之类的东西std::function
,即,这在 C++1y 中是不合法的:
std::vector<std::function<auto(const auto&)>> vecOfPolymorphicClosures;
如果这是合法的,那么您可以做一些事情,比如创建一个回调容器,每个回调容器都可以使用任何一组参数调用,并且每个回调都可以返回一个依赖于传递的参数类型的类型。auto
至少在理论上,任何给定回调的结果都可以存储在变量中。
两个问题:
- 在 C++1y 中有没有办法声明一个变量或容器可以容纳不同类型的多态 lambdas(除了类似的东西
boost::any
)? - 希望这样的事情成为可能是否合理,或者这种事情与静态类型不兼容?