引用文章 如何在lambda中引入递归调用

// clang++ 3.5
// maybe gcc 4.9 support it, but I don't test it
#include<iostream>
int main()
{
    auto fac = [&](auto&& self, int x)->int{
        return x < 1 ? 1 : x * self(self, x - 1);
    };
    std::cout<<fac(fac, 3)<<std::endl; //6
    return 0;
}

作者:蓝色
链接:https://www.zhihu.com/question/27441424/answer/36643770
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
// clang++ 3.5
// maybe gcc 4.9 support it, but I don't test it
#include<iostream>
template<typename Functor>
struct wrapper_type
{
    Functor functor;
    template<typename... Args>
    decltype(auto) operator()(Args&&... args) const&
    {
        return functor(functor, std::forward<Args>(args)...);
    }
};

template<typename Functor>
wrapper_type<typename std::decay<Functor>::type> wrapper(Functor&& functor)
{
    return{ std::forward<Functor>(functor) };
}

int main()
{
    auto fac = wrapper([&](auto&& self, int x)->int{
        return x < 1 ? 1 : x * self(self, x - 1);
    });
    std::cout << fac(3) << std::endl; //6
    return 0;
}

作者:蓝色
链接:https://www.zhihu.com/question/27441424/answer/36643770
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 
#include <iostream>  
#include <typeinfo>  
#include <functional>  
using namespace std;  
int main(void)  
{  
    std::function<int(int)> product;  
    product = [&product](int n) -> int{ return n <= 1? 1 : n * product(n - 1); };  
    cout << "The answer is: " << product(5) << endl;  
} 

链接:https://blog.csdn.net/zenny_chen/article/details/6045596

 

posted on 2018-05-18 19:53  月落无影  阅读(210)  评论(0编辑  收藏  举报