ьно неоднозначное имя не являе

Автор admin Понедельник, 18 мая 2009 11:32

ьно неоднозначное имя не является типом, необходимо использовать ключевое слово typename для вложенных типов (кроме списков инициализаторов в конструкторах, где это ключевое слово не только не нужно, но и недопустимо). Когда в предыдущем примере компилятор встречает конструкцию typename T::id, он знает (благодаря ключевому слову typename), что идентификатор id относится к вложенному типу, и что он может создать объект этого типа. Короче говоря, если тип, на который вы ссылаетесь в коде шаблона, уточняется параметром-шаблоном, обязательно используйте префикс typename везде, кроме спецификаций базового класса или списка инициализаторов в той же области видимости. Предыдущий пример поясняет, для чего нужно ключевое слово typename в программе TempTemp4.cpp. Без него компилятор считает, что выражение Seq::iterator не является типом, но мы используем его для определения возвращаемых типов функций begin() и end(). Аналогичное применение typename продемонстрировано в следующем примере. Эта программа выводит содержимое любого стандартного последовательного контейнера С++: //: C05:PrintSeq.cpp {-msc}{-mwcc} //


Комментарии закрыты.