从lambda创建函数,函数调用参数

时间:2015-03-09 21:15:27

标签: c++ c++11 lambda

为什么会出现以下编译器错误

  

错误:没有匹配函数来调用' memo(drawConnections_nicer2(const RangeVector&,std :: function):: __ lambda13)'                                                        });

使用此代码?

template<typename R, typename ... Args>
shared_ptr<function<R(Args...)> > memo(function<R(Args...)> fn)
{
    map<tuple<Args...>,R> table;
    return make_shared<function<R(Args...)> >([fn,table](Args... args) mutable ->
            R {
        auto argt = make_tuple(args...);
        auto memoized = table.find(argt);
        if(memoized==table.end())
        {
            auto result = fn(args...);
            table[argt]=result;
            return result;
        }
        else
        {
            return memoized->second;
        }
    });
}

...

shared_ptr<function<int(Range,int)> >  calculate_level = memo([&](Range current, int pos) ->
int {
    auto max_level = 0;
    for(auto i=pos;i>=0;i--)
    {
        auto other = drawn[i];
        if ( !(other.second<current.first || other.first>current.second) ) // intersects
        {
            max_level = max(max_level, (*calculate_level)(other,i-1)+1);
        }
    }
    return max_level;
});

我认为lambda应该自动包装在一个函数对象中吗?为什么不是这样?我可以在备忘录中没有函数参数吗?

0 个答案:

没有答案