我正在尝试编写函数 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<int>([](){ return 100; });
我想写 func([](){ return 100; });
最佳答案
我来晚了一点:)
有没有std::function
template<typename Class, typename R, typename... Args>
R resultType(R (Class::*)(Args...) const)
{
return R();
}
template<typename Class, typename R, typename... Args>
R resultType(R (Class::*)(Args...))
{
return R();
}
template<typename Functor>
auto func(Functor f) -> decltype(resultType(&Functor::operator()))
{
return resultType(&Functor::operator());
}
关于c++ - 当 lambda 作为参数传入时推导模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21245891/