测试环境VC2022
void T01()
{
auto lpfn = [](int x, auto f)->int
{
if (x == 1)
return 1;
return x * f(x - 1, f);
};
int xx = lpfn(12, lpfn);
}
以上是计算12以内阶乘的一个测试函数,函数名无法放在中括号里就放到小括号,做为一个参数传递。在VS2002中测试通过
这种方式还可以多个函数互调:
void T02()
{
auto lpfn1 = [](int x, auto f1, auto f2)->int
{
if (x == 1)
return f2();
return x * f1(x - 1, f1, f2);
};
auto lpfn2 = [lpfn1]()->int
{
//lpfn1(0, lpfn1, lpfn1); //通不过编译
return 1;
};
int x = lpfn1(10, lpfn1, lpfn2);
//int y = lpfn1(10, lpfn2, lpfn1); //这行通不过编译
}