История изменений
Исправление CatsCantFly, (текущая версия) :
Это замена не вызову виртуальных методов, если что, а тупорылой иерархии классов с динамик каст проверками типа или помойке всех свойств в базовом классе. Здесь же:
- Изолированные типы, не связаны ни в какие иерархии иине знающие ничего о других
- Отсутствие явных кастов к конкретным типам в месте вызова
- Можно налагать любые требования на интерфейс объектов в месте вызова.
Замена виртуальному вызову выглядит так
std::visit([](auto&& obj){ obj.foo(); }, obj);
Про то что это тот же самый тег типа внутри класса, это вообще фейспалм.
Что-то в моем варианте нет никаких идиотских тегов внутри классов и идиотских методов as_B() as_C() as_D(), интерфейс каждого класса описывает ровно то что относится к этому классу
Исправление CatsCantFly, :
Это замена не вызову виртуальных методов, если что, а тупорылой иерархии классов с динамик каст проверками типа или помойке всех свойств в базовом классе. Здесь же:
- Изолированные типы, не связаны ни в какие иерархии иине знающие ничего о других
- Отсутствие явных кастов к конкретным типам в месте вызова
- Можно налагать любые требования на интерфейс объектов в месте вызова.
Замена виртуальному вызову выглядит так
std::visit([](auto&& obj){ obj.foo(); }, obj);
Исправление CatsCantFly, :
Это замена не вызову виртуальных методов, если что, а тупорылой иерархии классов с динамик каст проверками типа или помойке всех свойств в базовом классе. Здесь же:
- Изолированные типы, не связаны ни в какие иерархии иине знающие ничего о других
- Отсутствие явных кастов к конкретным типам в месте вызова
- Можно налагать любые требования на интерфейс объектов в месте вызова. Замена виртуальному вызову выглядит так
std::visit([](auto&& obj){ obj.foo(); }, obj);
Исправление CatsCantFly, :
Это замена не вызову виртуальных методов, если что, а тупорылой иерархии классов с динамик каст проверками типа или помойке всех свойств в базовом классе. Здесь же:
- Изолированные типы, не связаны ни в какие иерархии иине знающие ничего о других
- Отсутствие явных кастов к конкретным типам в месте вызова
- Можно налагать любые требования на интерфейс объектов в месте вызова. Замена виртуальному вызову выглядит так [code=c++] std::visit([](auto&& obj){ obj.foo(); }, obj); [/code]
Исходная версия CatsCantFly, :
Это замена не вызову виртуальных методов, если что, а тупорылой иерархии классов с динамик каст проверками типа или помойке всех свойств в базовом классе. Здесь же:
- Изолированные типы, не связаны ни в какие иерархии иине знающие ничего о других
- Отсутствие явных кастов к конкретным типам в месте вызова
- Можно налагать любые требования на интерфейс объектов в месте вызова.