Size: a a a

2020 July 23

CD

Constantine Drozdov in supapro.cxx
micky 🇲🇽🚜🇷🇺
что такое Shape?
базовый класс для Triangle/Square/Rectangle
источник

CD

Constantine Drozdov in supapro.cxx
illya palkin
Только  вместо х лучше enum class Shape { Triangle, Square, Rectangle }
мы svg читаем?
источник

m🇲

micky 🇲🇽🚜🇷🇺... in supapro.cxx
Constantine Drozdov
базовый класс для Triangle/Square/Rectangle
все ясно спасибо за пример, прям то что нужно было)
источник

ip

illya palkin in supapro.cxx
micky 🇲🇽🚜🇷🇺
что такое Shape?
Это класс от которого наследуются Triangle / Square / etc.
источник

Д

Дмитрий in supapro.cxx
Constantine Drozdov
О чем ты вообще говоришь
Та я уже понял, что херню надумал) У меня есть данные в виде массива байт, есть целочисленный индификатор типа этих байт. Я думал как-то приводить данные к нужному типу по этому индификатору.  В рантайме, т.к. в процессе парсинга узнаю значение enum индификатора
источник

ip

illya palkin in supapro.cxx
micky 🇲🇽🚜🇷🇺
все ясно спасибо за пример, прям то что нужно было)
Я тебе ответ дал уже давно на это. Погугли Factory method
источник

m🇲

micky 🇲🇽🚜🇷🇺... in supapro.cxx
illya palkin
Я тебе ответ дал уже давно на это. Погугли Factory method
ок спасибо
источник

CD

Constantine Drozdov in supapro.cxx
illya palkin
Только  вместо х лучше enum class Shape { Triangle, Square, Rectangle }
enum/variant соответствует фундаментально нерасширяемым перечислениям, как только ты используешь их с возможным расширением, ты теряешь явный контракт и сажаешь здоровенную проблему
источник

CD

Constantine Drozdov in supapro.cxx
illya palkin
Только  вместо х лучше enum class Shape { Triangle, Square, Rectangle }
т.е. вот этот синтаксис означает, что это множество closed и расширение предполагается никогда, ты уверен?
источник

ip

illya palkin in supapro.cxx
Constantine Drozdov
enum/variant соответствует фундаментально нерасширяемым перечислениям, как только ты используешь их с возможным расширением, ты теряешь явный контракт и сажаешь здоровенную проблему
Интересно, а как же быть с 'readable code'
источник

CD

Constantine Drozdov in supapro.cxx
illya palkin
Интересно, а как же быть с 'readable code'
разница между enum/variant и unique_ptr<Base> только в closed/open
источник

CD

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

Д

Дмитрий in supapro.cxx
Constantine Drozdov
enum/variant соответствует фундаментально нерасширяемым перечислениям, как только ты используешь их с возможным расширением, ты теряешь явный контракт и сажаешь здоровенную проблему
А какое тогда лучшее решение?
источник

CD

Constantine Drozdov in supapro.cxx
Дмитрий
А какое тогда лучшее решение?
товарищ пишет лучшее решение, только непонятно, почему у него shared_ptr стоит еще на фабрике
источник

AS

Anatoly Shirokov in supapro.cxx
Дмитрий
Можно конечно все мои типы в структуру запихнуть и обернуть их в  std::optional, а потом в свитче туда данные пихать... Но наверное это маразм
std::variant?
источник

CD

Constantine Drozdov in supapro.cxx
если shared_ptr на фабрике, я бы ждал там shared_ptr<const Shape>
источник

ПК

Побитый Кирпич... in supapro.cxx
Constantine Drozdov
или тебе пример нужен?
std::shared_ptr<Shape> f(int x) {
      if (x == 0) return std::make_shared<Triangle>();
      if (x == 1) return std::make_shared<Square>();
      if (x == 2) return std::make_shared<Rectangle>();
      return nullptr;
}
Дак в твоём примере точно так же нет расширения
источник

ПК

Побитый Кирпич... in supapro.cxx
то есть закрытое множество
источник

ip

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

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

CD

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

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