为什么会出现以下编译器错误
错误:没有匹配函数来调用' 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应该自动包装在一个函数对象中吗?为什么不是这样?我可以在备忘录中没有函数参数吗?