【发布时间】:2013-03-01 18:44:40
【问题描述】:
boost::lambda 可以递归使用吗?
这不能编译:
using namespace boost::lambda;
auto factorial = (_1 == 0) ? 1 : factorial(_1-1);
有建议的解决方法吗?
编辑:关于使用 C++11 lambdas:以下内容在 VS2012 上无法编译:
std::function<int(int)> factorial;
factorial = [&factorial](int p)->int { return (p == 0) ? 1 : p*factorial(p-1); };
int main(int argc, char* argv[])
{
int i = factorial(5);
return 0;
}
另一个编辑:奇怪的是,这个工作正常:
std::function<int(int)> factorial =
[&](int p)->int { return (p == 0) ? 1 : p*factorial(p-1); };
int main(int argc, char* argv[])
{
int i = factorial(5);
return 0;
}
【问题讨论】:
-
如果您已经在使用 C++11,为什么不使用
std::function和内置递归 lambda? stackoverflow.com/questions/2067988/… -
boost::lambda 似乎比 msvc C++11 lambda 实现更加稳定和灵活...
-
您在使用 VC++ 实现 lambda 时遇到了哪些问题?我已经使用了很多次,但没有发现任何问题(好吧,自 SP1 以来没有任何问题)。
-
@RichardJ.RossIII - 见编辑。还是不行。
-
@DavidH 如果您将初始化程序与声明放在一起,它将为我编译(带有clang和警告,但执行良好)。
标签: c++ boost-lambda