Size: a a a

2020 July 23

Д

Дмитрий in supapro.cxx
Anatoly Shirokov
std::variant?
Как вариант)
источник

CD

Constantine Drozdov in supapro.cxx
illya palkin
ну не знаю. Писать
auto triangle = foo(Shape::Triangle);
явно лучше для меня, чем
auto triangle = foo(7); // что за 7 ? что это значит

Особенно если я уверен, что енам не будет расширяться
там скорее всего cin будет параметром или типа того
источник

AS

Anatoly Shirokov in supapro.cxx
illya palkin
ну не знаю. Писать
auto triangle = foo(Shape::Triangle);
явно лучше для меня, чем
auto triangle = foo(7); // что за 7 ? что это значит

Особенно если я уверен, что енам не будет расширяться
если ты десериализуешь из потока, то там будет int, как правило, фабрика по id типа для этого и служит
источник

CD

Constantine Drozdov in supapro.cxx
Anatoly Shirokov
если ты десериализуешь из потока, то там будет int, как правило, фабрика по id типа для этого и служит
там string будет
источник

CD

Constantine Drozdov in supapro.cxx
если int то можно забить enum class, да
источник

AS

Anatoly Shirokov in supapro.cxx
Дмитрий
Как вариант)
но вообще хотелось бы увидеть юзкейс реальный. либо тебе нужен универсальный контейнер для значения по типу QVariant, std::any, std::variant.
источник

AS

Anatoly Shirokov in supapro.cxx
если у тебя фиксированный набор типов (повторюсь), то используй std::variant или его подход к обработкой значений через std::visit
источник

AS

Anatoly Shirokov in supapro.cxx
смотри какая прелесть: https://en.cppreference.com/w/cpp/utility/variant/visit
источник

CD

Constantine Drozdov in supapro.cxx
Анатолий, тут главное, чтобы "фиксированное" было навсегда, до конца жизни проекта. По-моему лучше вообще забыть про variant до некоторого уровня мироощущения
источник

CD

Constantine Drozdov in supapro.cxx
Эта конструкция очень больно расширяется
источник

CD

Constantine Drozdov in supapro.cxx
Эта конструкция не позволяет переиспользовать методы
источник

Д

Дмитрий in supapro.cxx
Anatoly Shirokov
но вообще хотелось бы увидеть юзкейс реальный. либо тебе нужен универсальный контейнер для значения по типу QVariant, std::any, std::variant.
TLV encoding пишу, хотел таким образом обратно данные в нормальный вид переводить. Но, скорее всего, буду писать как в nlohmann json, где есть методы  типа is_bool и т.д. А там уже будет понятно, во что данные превращать
источник

AS

Anatoly Shirokov in supapro.cxx
Constantine Drozdov
Анатолий, тут главное, чтобы "фиксированное" было навсегда, до конца жизни проекта. По-моему лучше вообще забыть про variant до некоторого уровня мироощущения
я не против, но если автор возьмем паттер визитер в качестве альтернативы что-либо возвращать, то может выйти очень ничего
источник

🎄T

🎄🎊 R 🎅 Tb| ✡️ 🎊🎄... in supapro.cxx
Дмитрий
TLV encoding пишу, хотел таким образом обратно данные в нормальный вид переводить. Но, скорее всего, буду писать как в nlohmann json, где есть методы  типа is_bool и т.д. А там уже будет понятно, во что данные превращать
В нлоххман как раз вариант и подойдет
источник

CD

Constantine Drozdov in supapro.cxx
Anatoly Shirokov
я не против, но если автор возьмем паттер визитер в качестве альтернативы что-либо возвращать, то может выйти очень ничего
неявный контракт получится, ты же теряешь множество допустимых операций
источник

AS

Anatoly Shirokov in supapro.cxx
Constantine Drozdov
неявный контракт получится, ты же теряешь множество допустимых операций
боюсь, это не страшно с кейсом Дмитрия
источник

CD

Constantine Drozdov in supapro.cxx
Anatoly Shirokov
я не против, но если автор возьмем паттер визитер в качестве альтернативы что-либо возвращать, то может выйти очень ничего
простой пример же был
double square(ShapeVariant const& shape) {
     return visit(
           [] (Triangle) { return ...; }
           [] (Square) { return ...; }
           [] (Rectangle) { return ...; }
     );
}
источник

CD

Constantine Drozdov in supapro.cxx
и теперь ShapeVariant значит ShapeWithSquareVariant в половине кода
источник

CD

Constantine Drozdov in supapro.cxx
Mandelbrot не Shape, надо пополнить - пишем весь код заново
источник

AS

Anatoly Shirokov in supapro.cxx
Constantine Drozdov
простой пример же был
double square(ShapeVariant const& shape) {
     return visit(
           [] (Triangle) { return ...; }
           [] (Square) { return ...; }
           [] (Rectangle) { return ...; }
     );
}
визитер для полиморфных иерархий описывают отдельным интерфейсом, чтобы при добавлении нового типа получить по рукам везде, где он используется.
источник