Я новичок в C ++ и в настоящее время пытаюсь понять, как работают функции шаблона. Сначала я хотел добавить два числовых значения одного и того же типа, что довольно легко понять.
template <typename T>
T add(T a, T b){return a+b;}
int main(){
float a_f=2.5;float b_f=1.5;float c_f;
int a_i=2;int b_i=1;int c_i;
c_f = add(a_f, b_f);
c_i = add(a_i, b_i);
return 0;
}
Затем я хотел добавить два числовых числа с разными и одинаковыми типами. Мое наивное предположение было таким:
template<typename R, typename S, typename T>
R add(S a, T b){return a+b;}
int main(){
float a=3.2; int b=2;
auto result1 = add(a,b); // error: no matching function for call to ‘add(float&, int&)’
auto result2 = add(a,a); // error: no matching function for call to ‘add(float&, float&)’
auto result3 = add(b,b); // error: no matching function for call to ‘add(int&, int&)’
return 0;
}
Я знаю, что этот подход не верен, потому что у typename есть пересечение относительно типов данных, и поэтому само объявление не может быть правильным.
Как может быть реализована простая функция add (), которая добавляет два числовых значения c вместе, независимо от типа?