Re: как проверить std::variant empty
От: Кодт Россия  
Дата: 20.12.24 10:26
Оценка: 12 (1) +1
Здравствуйте, sergey2b, Вы писали:

S>функция возращает std::variant варианты которого определенные мной классы

S>подскажите пожалуйста как проверить что функция вернула не пустое значение std::variant

Добавить пустой вариант std::monostate, причём желательно — первым в списке, чтобы дефолтный конструктор был с дефолтным же типом.

Но если тип варианта приколочен гвоздями, — тогда либо заворачивать в std::optional, либо никак.

Либо же договориться, что у твоего варианта один или несколько типов имеют сигнальные "пустые" значения.
Ну грубо говоря
using V = std::variant<std::string, int>;

V v = get_v();

bool is_empty = std::holds_alternative<std::string>(v) && std::get<std::string>(v).empty();
bool is_zero = std::holds_alternative<int>(v) && !std::get<int>(v);

// или даже вот так
bool is_some_default = std::visit([](auto&& x) { using T = std::remove_cvref_t<decltype(x)>; return x == T{}; }, v)
Перекуём баги на фичи!
Отредактировано 20.12.2024 10:36 Кодт . Предыдущая версия . Еще …
Отредактировано 20.12.2024 10:35 Кодт . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.