boost :: lambdaを再帰的に使用できますか?
これはコンパイルされません:
using namespace boost::lambda;
auto factorial = (_1 == 0) ? 1 : factorial(_1-1);
推奨される回避策はありますか?
編集:C ++ 11ラムダの使用について:以下は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;
}