在可变参数模板中使用函数的多个重载

问题描述 投票:0回答:1

我想传递一个重载函数作为可变参数模板函数的参数。我了解如何使用一个特定函数(使用 static_cast)来做到这一点。但是,我想知道是否有一种方法可以在可变参数模板中使用多个同名函数。

这段代码说明了我的意思。

double f(double x){
    return x*x;
}
int f(int x){
    return x*x;
}

template<typename ... T>
bool fnc(foo,T...args){
    return (foo(args)+...);
}

我想写

fnc(f,1,2,3.5);

有没有一种优雅的方法可以在不使用模板递归的情况下实现这一点?

c++ variadic-templates function-parameter
1个回答
0
投票

使用一个类。函数成员重载。

struct Fclass {
    double operator()(double x){
        return x * x;
    }
    int operator()(int x) {
        return x*x;
    }
};

template<typename F, typename ...T>
bool fnc(F foo, T ...args){
    return (foo(args) + ...);
}

int main() {
    fnc(Fclass(), 1, 2, 3.5);
}
© www.soinside.com 2019 - 2024. All rights reserved.