История изменений
Исправление Siborgium, (текущая версия) :
Еще раз.
Есть иерархия типов
Animal ArtificialBarker
/ \
Dog AnotherDog
Все эти типы реализуют один интерфейс – они обладают методом bark()
. Реализация уже есть. Без варианта я могу только добавить в ArtificalBarker наследование от Animal, чтобы вызывать dynamic_cast<Animal&>(barkable).bark()
, но это а) логически некорректно и б) в общем случае потребует реализацию дополнительных методов в) стирает тип.
Зачем все это делать, если можно просто взять variant+visit? Почему вы хотите его избежать?
Исходная версия Siborgium, :
Еще раз.
Есть иерархия типов
Animal ArtificialBarker
/ \
Dog AnotherDog
Все эти типы реализуют один интерфейс – они обладают методом bark()
. Реализация уже есть. Без варианта я могу только добавить в ArtificalBarker наследование от Animal, чтобы вызывать dynamic_cast<Animal&>(barkable).bark()
, но это а) логически некорректно и б) в общем случае потребует реализацию дополнительных методов в) стирает тип.
Зачем все это делать, если можно просто взять variant+visit? Плчему вы хотите его избежать?