gpt4 book ai didi

c++ - 递归 lambda 的 Typedef

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:31:50 28 4
gpt4 key购买 nike

有没有一种方法可以创建一个 typedef 以便编译以下内容(y 组合器的基本“纯”实现)?

typedef ??? f;
[](f x){x(x);} ([](f x){x(x);});

这具有创建“递归 lambda”的效果,即通过使用第二个 lambda 来获取对自身的引用来调用自身。第一个 lambda 中的 x 是对第二个 lambda 的引用,因此 x(x) 使用对自身的引用调用第二个 lambda。此后,第二个 lambda 通过调用 x(x) 递归。这段代码在执行时应该会产生一个无限循环,直到遇到堆栈溢出。第二个函数的更复杂的实现可以产生任意递归行为。

我尝试过 typedefing 各种版本的 void(*)(...) 但我不相信它能成功。我的模板元编程不够强大,无法处理这种事情。

最佳答案

这个怎么样?

#include <functional>
#include <iostream>

struct X
{
template<typename F>
X(F f) : _f(f)
{ }

void operator () (std::function<void(X)> f)
{
std::cout << "Calling myself..." << std::endl;
_f(f);
}

std::function<void(X)> _f;
};

int main()
{
typedef X f;
[](f x){x(x);} ([](f x){x(x);});
}

关于c++ - 递归 lambda 的 Typedef,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15345529/

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