Login
Вопрос про шаблоны. переменной в шаблоне?
104 просмотров
Перейти к просмотру всей ветки
Zuletzt geändert 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;
};
Компайлер выдаёт кучу дряни:
Стоит стереть Т в <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:
}
}
Декларирую функцию:
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
..............................................
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:
}
}