将lambda及其参数都传递给函数

时间:2019-03-22 00:16:46

标签: c++ lambda c++17

我想编写一个既可以接受函数又可以接受参数的函数,例如下面的示例:

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'

我是否忽略了某些内容,还是在这种情况下编译器无法成功推断出模板参数?

0 个答案:

没有答案