小编krd*_*dln的帖子

重载函数作为可变参数模板函数的参数

我正在尝试创建可变参数模板函数,它将参数作为重载函数及其参数:)

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 …

c++ variadic-functions variadic-templates c++11

7
推荐指数
1
解决办法
1729
查看次数