Морские рассказы
Dec. 1st, 2009 05:01 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
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: и в чем шутка?
Date: 2011-03-10 11:09 am (UTC)template <> class pair<Foo,Foo> {}</pre> без полей first и second и тогда компиляция range<Foo> повиснет в воздухе.