Сообщение Re: как проверить std::variant empty от 20.12.2024 10:26
Изменено 20.12.2024 10:36 Кодт
Re: как проверить std::variant empty
Здравствуйте, sergey2b, Вы писали:
S>функция возращает std::variant варианты которого определенные мной классы
S>подскажите пожалуйста как проверить что функция вернула не пустое значение std::variant
Добавить пустой вариант std::monostate, причём желательно — первым в списке, чтобы дефолтный конструктор был с дефолтным же типом.
Но если тип варианта приколочен гвоздями, — тогда либо заворачивать в std::optional, либо никак.
Либо же договориться, что у твоего варианта один или несколько типов имеют сигнальные "пустые" значения.
Ну грубо говоря
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::get<0>(v).empty();
bool is_zero = !std::get<1>(v);
// или даже вот так
bool is_some_default = std::visit([](auto&& x) { using T = std::remove_cvref_t<decltype(x)>; return x == T{}; }, v)
Re: как проверить std::variant empty
Здравствуйте, sergey2b, Вы писали:
S>функция возращает std::variant варианты которого определенные мной классы
S>подскажите пожалуйста как проверить что функция вернула не пустое значение std::variant
Добавить пустой вариант std::monostate, причём желательно — первым в списке, чтобы дефолтный конструктор был с дефолтным же типом.
Но если тип варианта приколочен гвоздями, — тогда либо заворачивать в std::optional, либо никак.
Либо же договориться, что у твоего варианта один или несколько типов имеют сигнальные "пустые" значения.
Ну грубо говоря
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)