How to write a function that calls any specified function (or function object) with the specified arguments?
Here is what I tried:
#include <iostream> #include <functional> using namespace std; template <typename RetType, typename... ArgTypes> RetType q(function<RetType(ArgTypes...)> f, ArgTypes... args) { return f(args...); } int h(int a, int b, int c) { return a + b + c; } int main() { auto r = q(h, 1, 2, 3); cout << "called, result = " << r; return 0; }
The compiler says that the template argument deduction / substitution failed because of the inconsistent types 'std :: function <_Res (_ArgTypes ...)>' and 'int (*) (int, int, int)'.
I am not sure why template arguments cannot be output in my code.
source share