将任意模板向量作为函数参数C++传递

Passing arbitrary-templated vector as function argument C++

本文关键字:函数 参数 C++ 传递 任意模 向量      更新时间:2023-10-16

对不起,如果这是微不足道的事情,它也可能不是很重要,但我只是好奇,我还找不到答案。

C++我正在创建函数来评估向量中的某些东西,结果是双倍的,但我希望该函数同时适用于向量和向量。我选择的解决方案是重载,如这个展示简单示例所示:

double silly_example(vector<int> &vec){
return vec[0] + vec[1];
}
double silly_example(vector<double> &vec){
return vec[0] + vec[1];
}

但是,对于所有函数,重载函数的主体没有差异,这是正确的。如前所述,结果是双倍,计算使用双倍。如果传递向量,则 int 成员无论如何都会转换为双精度。 那么有没有办法以某种方式避免重载这些函数中的每一个,只是告诉编译器这里的模板并不重要,只要它是数字的东西?我希望像这样:

double wished_form(vector<auto> &vec){
return (double) vec[0] + (double) vec[1];
}

我知道汽车不是那样工作的,这只是为了展示我的意思:有没有这样的方法可以将两个重载功能合二为一?

谢谢,如果这是微不足道的或愚蠢的。

这很简单:

template <class T>
double wished_form(const vector<T>& vec) {
return (double) vec[0] + (double) vec[1];
}

如果T不能转换为double,则会发生编译时错误。