use*_*687 2 c++ templates overloading c++11
在c ++ 11中我有函数
double f(double x1);
double f(double x1, double x2);
double f(double x1, double x2, double x3);
double h(double x);
Run Code Online (Sandbox Code Playgroud)
我也有功能
double g(std::vector<double> y, double x1);
double g(std::vector<double> y, double x1, double x2);
double g(std::vector<double> y, double x1, double x2, double x3);
Run Code Online (Sandbox Code Playgroud)
g的实现是这样的
double g(std::vector<double> y, double x1, double x2, double x3)
{
double ans = 0.0;
for(g : y)
{
ans = h(g) * f(x1, x2, x3);
}
return ans;
}
Run Code Online (Sandbox Code Playgroud)
是否有一种优雅(模板化)的方式来做这个而不是用重载参数写g 3次?
Yak*_*ont 10
template<typename... Ts>
double g(std::vector<double> v, Ts&&...ts ) {
double ret = 1;
for(auto x:v){
ret *= h(x)*f(ts...);
}
return ret;
}
Run Code Online (Sandbox Code Playgroud)
如果你想限制ts是double超出通话小号f,它需要更多的工作.否则,上面就足够了.
(注意工作安全水准得到与概念C++ 1Y漂亮建兴:在C++ 11余票跳过的限制Ts,以doubles,而仅仅依靠f只服用double秒.)