Mediumlookup
Чем dependent name отличается от non-dependent?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
Dependent name зависит от параметра шаблона (T::iterator, x.foo() где x типа T) — ищется при инстанциации. Non-dependent (std::cout, f(42)) — ищется сразу при определении.
template<class T>
void f(T x) {
std::cout << x; // non-dependent — ищется сразу
typename T::iterator it; // dependent — нужен typename
x.template get<int>(); // dependent template-метод — нужен .template
}- Для dependent types нужен
typename, для dependent template-методов —.template; - Ошибки в non-dependent видны сразу при определении, в dependent — только при инстанциации;
- Поэтому шаблоны без инстанциации не проверяются полностью — нужны явные тесты.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.