我正在尝试创建可变参数模板函数,它将参数作为重载函数及其参数:)
int sumall(int a) { return a; }
int sumall(int a, int b) { return a+b; }
template<typename R, typename... A>
R doit( R(*f)(A...), A... a) {
return f(a...); }
Run Code Online (Sandbox Code Playgroud)
我想调用doit没有任何模板说明符或转换:
cout << doit(sumall, 7, 6) << endl
Run Code Online (Sandbox Code Playgroud)
这不会编译,但当返回类型无效时,一切都很完美:
void printsum(int a) { cout << a << endl; }
void printsum(int a, int b) { cout << a+b << endl; }
template<typename... A>
void vdoit( void(*f)(A...), A... a) {
f(a...); }
// ...
vdoit(printsum, 7, 6);
Run Code Online (Sandbox Code Playgroud)
是否可以修改第一个模板以使用仅限modyfing doit …