C ++ 0x позволит вам использовать ключевое слово auto
, чтобы компилятор мог определить время возврата выражения.
Для C ++ 03 я нашел единственный способ автоматизировать такой процесс - определить класс шаблона Promotion
, который определяет самый сильный тип между двумя типами, а затем специализировать его для любой пары типов, которые вам могут понадобиться.
template<> class Promotion< long, int > { typedef long strongest; }
template<> class Promotion< int, long > { typedef long strongest; }
и, таким образом:
template< typename T1, typename T2 >
Promotion<T1,T2>::strongest function( const T1 &a, const T2 &b ) { ... }
Если вы решите попробовать это решение, я бы предложил сгенерировать специализации Акции с автоматически сгенерированным заголовочным файлом.
Редактировать: я перечитал вопрос после прочтения другого (теперь удаленного) ответа:
Вы не можете вернуть тип переменной меньшего размера. Это потому, что значение переменных будет найдено только во время выполнения, а тип возвращаемой функции должен быть определен во время компиляции.
Предлагаемое мной решение всегда будет возвращать самый сильный тип между типом двух переменных.