您的C例子是无效的ISO C.它可以在C只使用也是有效的C的特征进行++:
typedef void (*func_type)();
typedef func_type (*func_func_type)();
int i = 5;
func_type f() { return --i ? (func_type)f : 0; }
int main()
{
func_func_type func = f;
do
{
func = (func_func_type)func();
}
while(func);
}
不能重新写这直接因为使用lambda表达式拉姆达不能引用本身(如f
一样),但你可以在lambda转换为一个函数指针,保留从一个函数指针类型强制转换到另一个,并将其存储在一个std::function
这样的:
#include <functional>
typedef void (*func_type)();
typedef func_type (*func_func_type)();
int i = 5;
func_func_type f = (func_func_type)[]{ return --i ? (func_type)f : nullptr; };
int main()
{
std::function<func_type()> func = f;
do
{
func = (func_func_type)func();
}
while(func);
}
你C示例不可移植,标准C不允许转换func指针指向其他类型的指针。 –
@Olaf,问题不是“我可以在C中使用lambda表达式吗?”它是“我可以用C++中的lambda来做到这一点吗?”所以C是否支持lambda表达式并不重要。 –
这是一个非常模糊的提示。 –