我正在尝试编写函数func
,以便编译器可以推断模板参数。当我传递std::function
时,它可以工作,但是无法处理lambda表达式:
template<typename TResult>
TResult func(std::function<TResult()> f)
{
return TResult();
}
int main()
{
// Visual Studio 2013
int result = func([]() { // error: 'TResult func(std::function<TResult(void)>)' : could not deduce template argument for 'std::function<TResult(void)>' from 'main::<lambda_d9d7854806072a2cb711f56185602ccb>'
return 100;
});
std::function<int()> testFunc = []() {
return 100;
};
int result2 = func(testFunc); // this works
return 0;
}
是否有可能推断出lambda的模板参数,以便使此行代码编译通过?我想写成func([](){ return 100; });
而不是func<int>([](){ return 100; });
。
const
一样重载noexcept
的resultType()
吗? - Mikhail Vasilyev