如何在c 0x中缓存lambda?

前端之家收集整理的这篇文章主要介绍了如何在c 0x中缓存lambda?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在C#中使用它们后,我正在尝试使用lambda中的lambda.我目前有一个boost元组(这是真正简化的版本).
typedef shared_ptr<Foo> (*StringFooCreator)(std::string,int,bool)
typedef tuple<StringFooCreator> FooTuple

然后我将全局命名空间中的函数加载到我的FooTuple中.理想情况下,我想用lambda替换它.

tuplearray[i] = FooTuple([](string bar,int rc,bool eom) -> {return shared_ptr<Foo>(new Foo(bar,rc,eom));});

我无法弄清楚lambda元组的函数签名是什么.它显然不是函数指针,但我无法弄清楚lambda的签名应该是什么. lambda的资源现在都非常薄.我意识到C 0x目前处于不稳定状态,但我很好奇如何让它发挥作用.我也意识到有更简单的方法可以做到这一点,但我只是在玩C 0x.我正在使用Intel 11.1编译器.

解决方法

– > operator设置lambda的返回类型,在没有返回类型的情况下,可以省略它.此外,如果可以由编译器推断,则可以省略返回类型.就像Terry说的那样,你不能将lambda分配给函数指针(GCC不正确地允许这种转换),但你可以使用std :: function.

代码适用于GCC和VC10(从VC的包含中删除tr1 /):

#include <tr1/tuple>
#include <tr1/functional>
#include <tr1/memory>

using namespace std;
using namespace std::tr1;

class Foo{};
typedef function<shared_ptr<Foo>(string,bool)> StringFooCreator;
typedef tuple<StringFooCreator> FooTuple;

int main() {
    FooTuple f(
        [](string bar,bool eom) {
            return make_shared<Foo>();
        }
    );

    shared_ptr<Foo> pf = get<0>(f)("blah",3,true);
}
原文链接:https://www.f2er.com/c/118814.html

猜你在找的C&C++相关文章