Mediumметапрограммированиеtraits
Что такое type traits и зачем они нужны?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
Type traits (из <type_traits>) — шаблоны, дающие информацию о свойствах типов во время компиляции. Возвращают std::bool_constant — используются в static_assert, SFINAE, if constexpr, концептах.
#include <type_traits>
template<class T>
void process(T x) {
static_assert(std::is_integral_v<T>, "T must be integral");
if constexpr (std::is_signed_v<T>) {
// специфика для знаковых
}
}- Основные:
is_integral,is_class,is_pointer,is_base_of,is_convertible; _v-варианты (C++17) дают значение напрямую:is_integral_v<T>вместоis_integral<T>::value;- Позволяют писать обобщённый код, ведущий себя по-разному для разных категорий типов.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.