2016-12-30 5 views
0

У меня есть этот шаблон:Передача параметров в шаблоне

template<class a> 
    a multiply(a x, a y){ 
     return x*y; 
    } 

Как я могу передать различные типы параметров? (Int и плавать, например)

+2

С предоставленным шаблоном вы не можете передавать разные типы. – DeiDei

ответ

1

просто вызовите функцию, как обычно:

int x = 2; 
int y = 3; 
multiply(x,y); 
+1

Я думаю, что он хочет вызвать функцию как 'multiply (5, 4.4f)' например. – DeiDei

5

Это зависит от того, чего вы хотите достичь. Вы можете явно указать аргумент шаблона (вместо того, чтобы позволить его выводить), что приведет к преобразованию аргумента «несоответствия» в этот тип.

Все примеры в этом ответе предположить 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; 
} 
+1

После C++ 11 мы можем изменить подпись на 'auto multiply (Lhs x, Rhs y)' или 'decltype (auto) multiply (Lhs x, Rhs y)' – AndyG

Смежные вопросы