Морские рассказы
C++ подобен морю.
В STL есть класс pair:
В STL есть класс pair:
#include <utility> #include <iostream> using namespace std; int main() { pair<int, float> p; p.first = 3; p.second = 4.5; cout << p.first << "," << p.second << endl; }теперь попробуем у него унаследовать.
#include <utility> #include <iostream> using namespace std; template<typename T> class range : public std::pair<T,T> { public: range(T v) : std::pair<T,T>(v,v) {} bool in(T v) { return first <= v && v <= second; } };Компилируется? Нет, не компилируется в gcc 4.x, а как компилируется? Вот так:
#include <utility> #include <iostream> using namespace std; template<typename T> class range : public std::pair<T,T> { public: range(T v) : std::pair<T,T>(v,v) {} bool in(T v) { return std::pair<T,T>::first <= v && v <= std::pair<T,T>::second; } };Мне это кажется весьма примечательным
Re: и в чем шутка?
Re: и в чем шутка?
С++ у нас ведь сильно типизированный, не так ли?
и ничуть не затеняю, какраз в виду использования полного квалификатора (другое дело, поймет ли это компилятор).
Re: и в чем шутка?
Известен, разумеется, это тип T.
Re: и в чем шутка?
template <> class pair<Foo,Foo> {}</pre> без полей first и second и тогда компиляция range<Foo> повиснет в воздухе.
Re: и в чем шутка?