【发布时间】:2014-06-07 10:26:56
【问题描述】:
我可以做这个吗?
假想语法:
auto foo = [] () { };
template <class T, typename ... Args>
auto foo =
[&] (T && V, Args && ... args) {
do_something(V);
foo(std::forward<Args>(args)...);
};
【问题讨论】:
-
我认为 C++14 可以让你这样做:coliru.stacked-crooked.com/a/386d6f281077b336
-
你会如何使用它?它看起来有点像变量模板(在 C++1y 的块范围内是不允许的)。作为多态 lambda,请参阅 chris 的解决方案。在 C++11 中,您可以将其实现为成熟的函数对象类。
-
foo的伪递归调用存在一些问题:标识符可能不会出现在带有auto的声明的初始化程序中。 (另外,你不能重载 lambda,但我想这是问题的一部分。) -
@chris 您可以将此(多态可变参数 lambda)与(本地)函数对象类型结合起来以实现重载和此伪递归。我认为这是一个答案。
-
@dyp,我还没有使用可变参数 lambda 来做任何有用的事情。我很乐意看到你的想法作为答案充实起来。
标签: c++ templates c++11 lambda variadic-templates