我想在一個可變參數模板中使用一個函數作爲參數,爲什麼下面不起作用?我如何使它工作?Variadic模板,函數作爲參數
template<typename F, typename... Args>
F test(F f, const Args&&... args) {
return f(std::forward<Args>(args)...);
}
int simple(int i) {
return i;
}
int main()
{
std::cout << test(simple, 2); // error, 'std::forward': none of the 2 overloads could convert all the argument types
}
爲什麼,當我添加了「測試」功能和「簡單」的功能基本類中,「測試」,作爲公共職能,並在主要做: 測試儀t; std :: cout << t.test(t.simple,2); 它不再有效,它說它找不到匹配的重載函數,而Tester ::簡單的非標準語法;使用&... – Alexander
@Alexander很快,因爲'simple'成爲一個成員函數。你不能將成員函數傳遞給上面寫的'test'函數。至少,你必須提供一個調用成員函數的實例。查看'std :: invoke'獲取更多詳細信息:http://en.cppreference.com/w/cpp/utility/functional/invoke –