Hardшаблоны
Что такое extern template?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
extern template (C++11) — явное объявление, что шаблон инстанцируется в другом TU. Без этого каждый TU генерирует одинаковый код, потом линкер дедуплицирует (медленно компилируется).
// header.h
extern template class std::vector<int>; // не инстанцировать здесь
// vectors.cpp — единственное место с явным инстанцированием
template class std::vector<int>; // компилятор генерирует код тут
// остальные TU используют это определение через extern- Без extern template каждый TU дублирует код
vector<int>, линкер дедуплицирует; - Применяется в больших проектах: общие инстанциации в один .cpp, в остальных — extern template declaration;
- Не нужно для тривиальных случаев, критично для тяжёлых библиотек.
В C++20 modules частично решают эту проблему эффективнее.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.