как проверить std::variant empty
От: sergey2b ЮАР  
Дата: 19.12.24 12:32
Оценка:
функция возращает std::variant варианты которого определенные мной классы
подскажите пожалуйста как проверить что функция вернула не пустое значение std::variant
Re: как проверить std::variant empty
От: Великий Реверс google
Дата: 19.12.24 12:36
Оценка:
жаль что в далеких америках
гуглы то и заблокированы
https://old.reddit.com/r/cpp_questions/comments/hu7cen/is_it_possible_to_have_an_empty_variant/
https://stackoverflow.com/questions/76791369/how-do-i-tell-if-a-stdvariant-holds-any-value-at-all
Re[2]: как проверить std::variant empty
От: sergey2b ЮАР  
Дата: 19.12.24 12:39
Оценка:
Здравствуйте, Великий Реверс, Вы писали:

ВР>жаль что в далеких америках

ВР>гуглы то и заблокированы

я же конечно вначале погуглил и попробовал все варианты из первой ссылки
но значит с ними что то не так если я спросил
Re[3]: как проверить std::variant empty
От: Великий Реверс google
Дата: 19.12.24 12:41
Оценка:
в гугле
std::variant empty
первые две ссылки
Re: как проверить std::variant empty
От: rg45 СССР  
Дата: 19.12.24 13:29
Оценка: 12 (1)
Здравствуйте, sergey2b, Вы писали:

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

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

Ну, это ещё нужно постараться, чтоб получить такой объект std::variant.

Ну а вообще, можно использовать variant::index:

https://coliru.stacked-crooked.com/a/052948c9085c8524

template <typename...T>
bool empty(const std::variant<T...>& v)
{
    return v.index() == std::variant_npos;
}
--
Справедливость выше закона. А человечность выше справедливости.
Re[2]: как проверить std::variant empty
От: rg45 СССР  
Дата: 19.12.24 13:40
Оценка:
Здравствуйте, Великий Реверс, Вы писали:

ВР>жаль что в далеких америках

ВР>гуглы то и заблокированы
ВР>https://old.reddit.com/r/cpp_questions/comments/hu7cen/is_it_possible_to_have_an_empty_variant/
ВР>https://stackoverflow.com/questions/76791369/how-do-i-tell-if-a-stdvariant-holds-any-value-at-all

И как обычно, ты отвечаешь не на тот вопрос, который был задан. Главное, чтоб через гугл.
--
Справедливость выше закона. А человечность выше справедливости.
Re[3]: как проверить std::variant empty
От: Великий Реверс google
Дата: 19.12.24 13:43
Оценка:
именно на тот
просто ты хочешь посчитать
а люди советуют забить пустотой
для этого моностеит и предусмотрен
Re[4]: как проверить std::variant empty
От: rg45 СССР  
Дата: 19.12.24 13:55
Оценка:
Здравствуйте, Великий Реверс, Вы писали:

ВР>именно на тот

ВР>просто ты хочешь посчитать
ВР>а люди советуют забить пустотой
ВР>для этого моностеит и предусмотрен

Ну а теперь ещё раз читай вопрос
Автор: sergey2b
Дата: 19.12 15:32
:

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


Ты предлагаешь обходной манёвр, а не даёшь прямой ответ на вопрос. Можно было хотя бы поинтересоваться, приемлемо ли для него использование std::monostate.

Как бы то ни было, здесь и близко нет повода, чтобы отвечать в твоей обычной хамской манере "через губу". Ты кем себя возомнил?
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 19.12.2024 14:00 rg45 . Предыдущая версия . Еще …
Отредактировано 19.12.2024 13:56 rg45 . Предыдущая версия .
Re: как проверить std::variant empty
От: sergii.p  
Дата: 19.12.24 14:53
Оценка: 12 (1)
Здравствуйте, sergey2b, Вы писали:

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

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

не знаю конечно зачем, но похоже если variant пустой, то это уже странное поведение программы. А если надо явно проверять на пустоту, то лучше кмк, как уже писали, monostate или optional.
Re[2]: как проверить std::variant empty
От: Великий Реверс google
Дата: 19.12.24 15:07
Оценка:
https://en.cppreference.com/w/cpp/utility/variant/variant_npos
говорит что если вариант уже инициализирован в число
то индекс фолсе на сравнение
так что увы
Re[3]: как проверить std::variant empty
От: rg45 СССР  
Дата: 19.12.24 15:15
Оценка:
Здравствуйте, Великий Реверс, Вы писали:

ВР>https://en.cppreference.com/w/cpp/utility/variant/variant_npos

ВР>говорит что если вариант уже инициализирован в число
ВР>то индекс фолсе на сравнение
ВР>так что увы

Что "увы"? Если инициализирован, тогда конечно. Ты говоришь какую-то банальщину.
--
Справедливость выше закона. А человечность выше справедливости.
Re: как проверить std::variant empty
От: andrey.desman  
Дата: 19.12.24 17:10
Оценка: 12 (1) +2 :)
Здравствуйте, sergey2b, Вы писали:

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

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

Никак не надо, она не должна такое возвращать. Вариант может быть "пустым" только из-за исключения. Если функция внутри ловит исключение, то возвращать должна валидный вариант. Если не ловит, то ты должен ловить.
Если тебе нужно валидное пустое значение, то std::monostate
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...
Пока на собственное сообщение не было ответов, его можно удалить.