Карточка Middle Современный C++20/23 обновлено

std::variant и std::visit

Вопрос

Как обработать std::variant<int, std::string> в зависимости от хранимого типа?

Попробуйте сами

Ответьте про себя или вслух, потом откройте ответ и сверьтесь.

Показать ответ и разбор

Коротко

std::visit с функциональным объектом, у которого перегрузки на все альтернативы, часто приёмом overloaded: std::visit(overloaded{{...}, {...}}, v);. Или std::holdsalternative<T и std::get<T/std::getif<T.

Ответ

std::visit с функциональным объектом, у которого перегрузки на все альтернативы, часто приёмом overloaded: std::visit(overloaded{[](int i){...}, [](const std::string& s){...}}, v);. Или std::holds_alternative<T> и std::get<T>/std::get_if<T>.

Разбор

std::visit с функциональным объектом, у которого перегрузки на все альтернативы, часто приёмом overloaded: std::visit(overloaded{[](int i){...}, [](const std::string& s){...}}, v);. Или std::holds_alternative<T> и std::get<T>/std::get_if<T>.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.