Морские рассказы
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; } };Мне это кажется весьма примечательным
Раз он в море закинул невод...
Date: 2009-12-01 04:25 pm (UTC)Как уже отметили некоторые постеры, многие компалеры по доброте душевной ослабляют это требование и находят имя, даже если оно в базовом классе. Но по Стандарту требуется fully qualified имя. Пример из 14.6.2/3:
Re: Раз он в море закинул невод...
Date: 2009-12-01 04:37 pm (UTC)Re: Раз он в море закинул невод...
Date: 2009-12-01 04:44 pm (UTC)Письменный и Устный стандарт C++.
Date: 2009-12-01 04:48 pm (UTC)Re: Письменный и Устный стандарт C++.
Date: 2009-12-01 05:06 pm (UTC)И тут по округе пролетела весть о том что к старой тёте Малке из бухгалтерии приезжает сын из столицы, кандидат компьютерных наук. С женой и дочкой. Попроведовать, отдохнуть...
Женился или срезал?
Date: 2009-12-01 05:10 pm (UTC)Re: Женился или срезал?
Date: 2009-12-01 05:21 pm (UTC)