gpt4 book ai didi

C++ Lambdas : function that returns a function that returns a function . ..?

转载 作者:太空宇宙 更新时间:2023-11-04 08:23:52 27 4
gpt4 key购买 nike

C++ 中是否有一种模式允许您返回一个函数,它返回一个函数本身。例如

std::function<...> func = ...;
do
{
func = func();
}
while (func);

在 C 中,我认为您可以使用将 void* 转换为 void* (*)() 来实现它。所以你会有

typedef void* (*MyFunc)(void);
MyFunc func = ...
do
{
func = (MyFunc)func();
}
while(func);

是否可以用 lambda 来实现?

最佳答案

您的 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,因为 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++ Lambdas : function that returns a function that returns a function . ..?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31894112/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com