}: typedef double E: tempiate
Автор admin
Среда, 20 мая 2009 11:32
}: typedef double E: tempiate void swap(T& tl. T& t2) { cout « “global swap” « endl; T temp = tl; tl – t2; t2 – temp; } tempiate class X : public Y { public: E f() { g(): this->h(); T tl – TO. t2 – TO); cout « tl « endl; swap(tl. t2): std::swap(tl. t2): cout « typeid(E).nameO « endl: return E(t2); } }: int mainO { X x; cout « x.fO « endl: } ///:- 1 Также основанный на одном из примеров Херба Саттера. Разрешение имен 221 Результат выполнения программы будет выглядеть так: global g() Y::h() О global swap double 1 Теперь посмотрим на объявления в X::f(). • Е, тип возвращаемого значения X::f(), не является зависимым именем, поэтому его поиск производится при обработке шаблона. В результате обнаруживается определение типа, в соответствии с которым Е определяется как double. На первый взгляд это выглядит странно, поскольку в нешаблонных классах сначала будет найдено определение Е в базовом классе, но таковы правила (базовый класс Y является зависимым базовым классом, поэтому в момент определения шаблона поиск в нем производиться не может). • Вызов д() тоже независим, поскольку
Комментарии закрыты.
Последние комментарии