У меня есть этот шаблон:Передача параметров в шаблоне
template<class a>
a multiply(a x, a y){
return x*y;
}
Как я могу передать различные типы параметров? (Int и плавать, например)
У меня есть этот шаблон:Передача параметров в шаблоне
template<class a>
a multiply(a x, a y){
return x*y;
}
Как я могу передать различные типы параметров? (Int и плавать, например)
просто вызовите функцию, как обычно:
int x = 2;
int y = 3;
multiply(x,y);
Я думаю, что он хочет вызвать функцию как 'multiply (5, 4.4f)' например. – DeiDei
Это зависит от того, чего вы хотите достичь. Вы можете явно указать аргумент шаблона (вместо того, чтобы позволить его выводить), что приведет к преобразованию аргумента «несоответствия» в этот тип.
Все примеры в этом ответе предположить int i; float f;
Например, вы можете сделать это:
float res = multiply<float>(i, f); //i will be implicitly converted to float
Или это:
int res = multiply<int>(i, f); //f will be implicitly converted to int
Или даже так:
double res = multiply<double>(i, f); //both i and f will be implicitly converted to double
Если вы действительно хотите принимать параметры разных типов, вам нужно как-то обработать спецификацию типа возврата. Это, вероятно, самый естественный способ сделать это:
template <class Lhs, class Rhs>
auto multiply(Lhs x, Rhs y) -> decltype(x * y)
{
return x * y;
}
После C++ 11 мы можем изменить подпись на 'auto multiply (Lhs x, Rhs y)' или 'decltype (auto) multiply (Lhs x, Rhs y)' – AndyG
С предоставленным шаблоном вы не можете передавать разные типы. – DeiDei