2014-11-14 2 views
1

Так, например, я хочу создать функцию, которая добавит два числа и вернет общее число.создание функции шаблона с различными параметрами

template<typename T1, typename T2> 
T1 add(T1 n1, T2 n2){ 
    return n1 + n2; 
} 

Проблемы, если T1 является int и T2 является float. Затем функция будет return int. Но я хочу это return float. Есть ли уловка или способ ее достижения?

ответ

4

Да

template<typename RT, typename T1, typename T2> 
RT add(T1 n1, T2 n2){ 
    return n1 + n2; 
} 

Теперь называем это нравится: -

add<float>(2,3.0); 
+0

Что будет синтаксисом для арифметических операторов? – Cirvis

3

Если вы используете C++ 14:

template<typename T1, typename T2> 
auto add(T1 n1, T2 n2) 
{ 
    return n1 + n2; 
} 

Это похоже на C++ 11 версии, но не требует, чтобы выписать trailing-return-type (что приятно).

+0

Почему бы не 'decltype (auto)'? 'add' должен возвращать ссылку, если' operator + 'для двух типов возвращает один – Columbo

+0

@Columbo: Я признаюсь, что знаю немного об этом. Пожалуйста, не стесняйтесь предлагать соответствующее средство. –

1

Другое решение C++ 11 должно было бы использовать std::common_type<T1, T2>::type в качестве типа возврата.

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