@famousman204

Что значит typename?

Добрый вечер! Есть задача сделать итератор для стека(да, я в курсе что есть другие контейнеры =) ) Подсмотрел у ребят как это сделать, но не могу понять что значит это:
typedef typename std::stack<T>::container_type::iterator iterator;


typedef я знаю.
typename - не уверен что понимаю это ключевое слово. Внеtemplate<typename T> как я понял используется для помощи компилятору в определении типа.
а что происходит дальшеstd::stack<T>::container_type::iterator ? разве у стека есть итератор?
  • Вопрос задан
  • 77 просмотров
Решения вопроса 1
Nipheris
@Nipheris Куратор тега C++
1. typename в данном случае нужен компилятору только как подсказка от разработчика, что последующий идентификатор (т.е. std::stack<T>::container_type::iterator) - это действительно имя типа. Подсказка нужна потому, что этот typedef вероятно находится также в шаблоне, и мы ещё не знаем, во что конкретно инстанциируется шаблон std::stack (в этом случае говорят, что container_type "is dependent on a template-parameter" - пока не инстанциируем std::stack, не узнаем).

2. Member-тип container_type эквивалентен типу нижележащего контейнера (т.к. std::stack - это адаптер под интерфейс стека, а не реальный контейнер, реальный контейнер для хранения вы выбираете вторым параметром шаблона, по-умолчанию это std::deque).

3. Вот у std::deque<T> итератор действительно есть.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы