Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Вопрос про шаблоны. переменной в шаблоне?

11.07.07 11:21
Вопрос про шаблоны. переменной в шаблоне?
 
evgher постоялец
evgher
Последний раз изменено 12.07.07 16:26 (evgher)
Никак не могу понять
Декларирую функцию:
friend Rational<T> operator + <T>(const Rational<T>&, const Rational<T>&);
в
template <class T>
class Rational{
T num, den;
public:
...
friend Rational<T> operator + <T>(const Rational<T>&, const Rational<T>&);
....
static const Rational one;
};
Компайлер выдаёт кучу дряни:
В ответ на:

usr/include/c++/3.3/bits/stl_iterator_base_types.h: In instantiation of `std::iterator_traits<int>':
Rational.h:33: instantiated from `std::reverse_iterator<int>'
Rational.h:33: instantiated from `Rational<int>'
Rational.cpp:17: instantiated from here
/usr/include/c++/3.3/bits/stl_iterator_base_types.h:126: error: `int' is not a
class, struct, or union type
..............................................

Стоит стереть Т в <T>
т.е.
вместо
friend Rational<T> operator + <T>(const Rational<T>&, const Rational<T>&);
будет
friend Rational<T> operator + <>(const Rational<T>&, const Rational<T>&);
В чём различие?
В следующей строке - всё работает в обоих случаях
friend std::ostream& operator << <Т>(std::ostream& , const Rational<T>&);
Существует ли возможность узнать
тип переменной следующим или похожим способом в С++?
template<class T>
void ClassName<T>::function(T a){
switch(T){
case int: ... break;
case rational: .... break;
case string: .... break:
default:
}
}
 

Перейти на