Mediumc++17any
Что такое std::any и когда его применять?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
std::any (C++17) — контейнер для значения любого типа (type-erased). В отличие от variant, тип не фиксируется заранее. Хранит через динамическую аллокацию (с SBO для маленьких типов).
std::any a = 42;
a = std::string("hi");
if (a.type() == typeid(std::string)) {
std::string& s = std::any_cast<std::string&>(a); // бросает bad_any_cast если не тот тип
}
auto p = std::any_cast<int>(&a); // указатель или nullptrИспользуется редко: для API, где тип определяется в рантайме (плагины, скриптовые системы), конфигов с гетерогенными значениями, opaque-данных.
В большинстве случаев лучше variant (compile-time список типов) или полиморфизм через базовый класс — any жертвует безопасностью типов ради гибкости.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.