有没有办法创建typedef
以便以下(y-combinator的基本“纯”实现)编译?
typedef ??? f;
[](f x){x(x);} ([](f x){x(x);});
这具有创建“递归lambda”的效果,即通过使用第二个lambda来获取对自身的引用来调用自身的效果。第一个lambda中的x
是对第二个lambda的引用,因此x(x)
使用对自身的引用来调用第二个lambda。此后,第二个lambda通过调用x(x)
进行递归。这段代码在执行时应该产生一个无限循环,直到它遇到堆栈溢出。第二个函数的更复杂的实现可以产生任意的递归行为。
我已尝试typedef
各种版本的void(*)(...)
,但我不相信这会成功。我的模板元编程不够强大,无法处理这类事情。
答案 0 :(得分:6)
这个怎么样?
#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);});
}