Вызов функции шаблона без <>; вывод типа

Если у меня есть шаблон функции сtypename Tгде компилятор может установить тип самостоятельно, мне не нужно писать тип явно, когда я вызываю функцию как:

template < typename T > 
T min( T v1, T v2 ) {
   return ( v1 < v2 ) ? v1: v2;
}
int i1 = 1, i2 = 2; int i3 = min( i1, i2 ); //no explicit <type> 

Но если у меня есть шаблон функции с двумя разными типами, например:

template < typename TOut, typename TIn >
TOut round( TIn v ) {
   return (TOut)( v + 0.5 );
}
double d = 1.54;
int i = round<int>(d); //explicit <int>

Правда ли, что мне всегда нужно указывать хотя бы 1 имя типа? Я предполагаю, что причина в том, что C ++ не может различать функции между различными типами возврата.

Но если я использую функцию void и передаю ссылку, опять же, я не должен явно указывать возвращаемое имя типа:

template < typename TOut, typename TIn > 
void round( TOut & vret, TIn vin ) {
   vret = (TOut)(vin + 0.5);
}
   double d = 1.54;
   int i; round(i, d); //no explicit <int>

Стоит ли вывод избегать функций с возвратом и больше отдавать предпочтениеvoid функции, которые возвращаются через ссылку при написании шаблонов? Или есть возможность избежать явного написания возвращаемого типа? Что-то вроде «вывода типа» для шаблонов. Возможен ли «вывод типа» в C ++ 0x?

Ответы на вопрос(0)

Ваш ответ на вопрос