Mediumtypename
Чем typename нужен в dependent names?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
Внутри шаблона при обращении к типу через параметр (T::iterator) компилятор по умолчанию считает это non-type. typename явно указывает «это тип».
template<class T>
void f() {
typename T::value_type x; // без typename — compile-ошибка
}- Применяется для traits,
value_type,iterator_category, nested types; - Не нужен для не-dependent имён (
std::vector<int>::iterator); - Не нужен в base class specifiers (
class Derived : T::Nested {}) и в initializer list. - Правило:
T::Что-токак тип →typenameобязателен.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.