Size: a a a

2020 May 27

AZ

Alexander Zaitsev in pro.cxx.holywars
Мне нужны именно объекты
источник

CD

Constantine Drozdov in pro.cxx.holywars
Alexander Zaitsev
Мне нужны именно объекты
а хотпафы горят?
источник

AZ

Alexander Zaitsev in pro.cxx.holywars
Constantine Drozdov
а хотпафы горят?
Вообще похуй
источник

CD

Constantine Drozdov in pro.cxx.holywars
Alexander Zaitsev
Вообще похуй
ну тогда клади unique_ptr<interface> лол
источник

CD

Constantine Drozdov in pro.cxx.holywars
на хуй variant
источник

AZ

Alexander Zaitsev in pro.cxx.holywars
Constantine Drozdov
ну тогда клади unique_ptr<interface> лол
Там выше было, что не хочу наследоваться
источник

CD

Constantine Drozdov in pro.cxx.holywars
Alexander Zaitsev
Там выше было, что не хочу наследоваться
так ты мессаги не наследуешь
источник

CD

Constantine Drozdov in pro.cxx.holywars
ты же все равно будешь перемещать
источник

CD

Constantine Drozdov in pro.cxx.holywars
ну перемести в потомка интерфейса, привет TypeErasure aka std::function
источник

CD

Constantine Drozdov in pro.cxx.holywars
шаблонный потомок интерфейса, который может завернуть любую твою мессагу
источник

CD

Constantine Drozdov in pro.cxx.holywars
у этого способа есть очевидный плюс
источник

CD

Constantine Drozdov in pro.cxx.holywars
ты не будешь страдать, если этот variant будет расширяться и он не будет использован жопой, если мог расширяться
источник

AZ

Alexander Zaitsev in pro.cxx.holywars
Ну вот расширение меня и смущало, хоть эта проблема макросом закрывается спокойно
источник

CD

Constantine Drozdov in pro.cxx.holywars
когда ты пишешь variant<A, B, C>, очень легко огрести неявные интерфейсы при визите такой хуйни, пример что ты написал
using shape = variant<Square, Circle, Rectangle>
потом человек-джун дописал
shape_square = visit_variant(
   [] (Square const& )
   [] (Circle const& )
   [] (Rectangle const& )
)
источник

CD

Constantine Drozdov in pro.cxx.holywars
оппачки Mandelbrot уже не shape
источник

CD

Constantine Drozdov in pro.cxx.holywars
а если у тебя стоит промежуточный конвертер до минимального интерфейса, требования хотя бы будут собраны в одном описании интерфейса
источник

CD

Constantine Drozdov in pro.cxx.holywars
так что
struct shape_interface {
  virtual void draw(context_type&) = 0;
};

template <typename Shape>
struct shape_impl : shape_interface {
  Shape shape_;
  void draw(context_type& context) override {  shape_.draw(context); }
};
источник

CD

Constantine Drozdov in pro.cxx.holywars
и вместо наследования только конвенция именования метода draw
источник

CD

Constantine Drozdov in pro.cxx.holywars
а человек-джун задумается, не придумал ли он новую сущность shape_with_square_interface
источник

CD

Constantine Drozdov in pro.cxx.holywars
хм... я тут прикольную вещь придумал
источник