我想传递一个重载函数作为可变参数模板函数的参数。我了解如何使用一个特定函数(使用 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);
有没有一种优雅的方法可以在不使用模板递归的情况下实现这一点?
使用一个类。函数成员重载。
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);
}