Size: a a a

2020 August 07

m

magras in pro.cxx
Андрей Руссков
вот я понимаю зачем я бы мог хотеть посетить один variant несколькими функторами (а-ля перегрузками). А вот что такое посетить несколько вариантов одним функтором?
Классический miltidispatch. Например найти пересечение двух фигур описанных variant<Rectangle, Circle>.
источник

АР

Андрей Руссков... in pro.cxx
кажется, я дурачок и надо более простыми словами
источник

АР

Андрей Руссков... in pro.cxx
чем "мультидиспатч"
источник

m

magras in pro.cxx
Андрей Руссков
чем "мультидиспатч"
struct IntersectVisitor {
 bool operator()(Rect, Rect) { ... };
 bool operator()(Rect, Circle) { ... };
 bool operator()(Circle, Rect) { ... };
 bool operator()(Circle, Circle) { ... };
};

bool isIntersecting = visit(IntersectVisitor{}, figureA, figureB);
источник

NP

Nikita Provotorov in pro.cxx
Андрей Руссков
чем "мультидиспатч"
ну вот как найти пересечение двух фигур, записанных в два вот таких вот вариантах?
источник

АР

Андрей Руссков... in pro.cxx
magras
struct IntersectVisitor {
 bool operator()(Rect, Rect) { ... };
 bool operator()(Rect, Circle) { ... };
 bool operator()(Circle, Rect) { ... };
 bool operator()(Circle, Circle) { ... };
};

bool isIntersecting = visit(IntersectVisitor{}, figureA, figureB);
вот так понятно
источник

АР

Андрей Руссков... in pro.cxx
Nikita Provotorov
ну вот как найти пересечение двух фигур, записанных в два вот таких вот вариантах?
ну до этого я знал N способов ) Сейчас - N+1
источник

KO

Konstantin Osipov in pro.cxx
я посмотрел ассемблерный код который генерирует gcc и похоже я больше не буду пользоваться std::visit никогда
источник

NP

Nikita Provotorov in pro.cxx
Konstantin Osipov
я посмотрел ассемблерный код который генерирует gcc и похоже я больше не буду пользоваться std::visit никогда
портянка из get_if будет лучше?)
источник

d

dekabr in pro.cxx
ну через index не так уж плохо выглядит
источник

KO

Konstantin Osipov in pro.cxx
switch (enum) будет лучше.
источник

VK

Valentin Kornienko in pro.cxx
Konstantin Osipov
я посмотрел ассемблерный код который генерирует gcc и похоже я больше не буду пользоваться std::visit никогда
Что такое?
источник

O

Ofee in pro.cxx
Андрей Руссков
почему кстати они задом наперед а? Ведь есть же логика в порядке "посетить это вот этим"
Проблема недостатка слоёв абстракций решается как-то так, я уже давно в своём коде завёл подобную функцию :)
upd: godbolt
источник

АР

Андрей Руссков... in pro.cxx
Valentin Kornienko
Что такое?
неприятный там код, кажется, из-за исключений
источник

KO

Konstantin Osipov in pro.cxx
Valentin Kornienko
Что такое?
создаёт функции на каждый вариант
источник

АР

Андрей Руссков... in pro.cxx
а, не, лол
источник

АР

Андрей Руссков... in pro.cxx
это же наоборот гениально
источник

АР

Андрей Руссков... in pro.cxx
короче он создает доп. функции чтобы сделать из них массив
источник

KO

Konstantin Osipov in pro.cxx
правда? гениально вызывать функию если её можно не вызывать?
источник

АР

Андрей Руссков... in pro.cxx
и прыгать в func_array[varinant_index]();
источник