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