我想编写一个既可以接受函数又可以接受参数的函数,例如下面的示例:
template <typename R, typename... Ts>
R call(std::function<R(Ts...)> func, Ts&&... params)
{
return func(std::forward<Ts>(params)...);
}
int main()
{
call([](int x) { return x * 2; }, 5);
}
但是,编译器都不满意这个简短的程序。 MSVC抱怨以下问题:
error C2672: 'call': no matching overloaded function found
error C2784: 'R call(std::function<R(Ts...)>,Ts &&...)': could not deduce template argument for 'std::function<R(Ts...)>' from 'main::<lambda_d2586666649cd15c20c1a4f532453c67>'
note: see declaration of 'call'
我是否忽略了某些内容,还是在这种情况下编译器无法成功推断出模板参数?