LINUX.ORG.RU

История изменений

Исправление 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? Плчему вы хотите его избежать?