Информация об изменениях

Сообщение Re[4]: std::get(std::variant) от 23.10.2025 19:11

Изменено 23.10.2025 20:00 Marty

Re[4]: std::get(std::variant)
Здравствуйте, rg45, Вы писали:

R>Да прям уж куча:


Именно что куча


R>https://coliru.stacked-crooked.com/a/3bf34d7526b1245c


R>
R>    std::visit([](auto&& t) {
R>        std::cout << "Тут лежит " << t << std::endl;
R>    }, v);
R>


R>А как бы ты хотел чтоб это выглядело? Можешь примерчик набросать?


Как-то так:
int func(MyVariant v)
{
    auto kind = getKind(v);
    if (kind==Kind::A)
    {
        doSomething(get<Kind::A>(v));
        // doSomething(get(kind, v)); // или даже так
    }
    else if (kind==Kind::B || kind==Kind::C)
    {
        log << "Error: " << enum_serialize(kind) << " not allowed here\n";
        return -1; // error - B or C not allowed here
    }
    else
    {
        return 0; // OK
    }
}


Просто и понятно.

Или switch(kind) сделать, или ещё что
Re[4]: std::get(std::variant)
Здравствуйте, rg45, Вы писали:

R>Да прям уж куча:


Именно что куча


R>https://coliru.stacked-crooked.com/a/3bf34d7526b1245c


R>
R>    std::visit([](auto&& t) {
R>        std::cout << "Тут лежит " << t << std::endl;
R>    }, v);
R>


R>А как бы ты хотел чтоб это выглядело? Можешь примерчик набросать?


Как-то так:
int func(MyVariant v)
{
    auto kind = getKind(v);
    if (kind==Kind::A)
    {
        doSomething(get<Kind::A>(v));
        // doSomething(get(kind, v)); // или даже так
    }
    else if (kind==Kind::B || kind==Kind::C)
    {
        log << "Error: " << enum_serialize(kind) << " not allowed here\n";
        return -1; // error - B or C not allowed here
    }
    else
    {
        return 0; // OK
    }

    //...

}


Просто и понятно.

Или switch(kind) сделать, или ещё что