Почему вы хотите избежать использования dynamic_cast
? Это вызывает неприемлемую горлышко бутылки в вашем приложении? Если нет, то, возможно, не стоит ничего делать с кодом прямо сейчас.
Если вы хорошо торгуете с некоторой долей безопасности для небольшой скорости в вашей конкретной ситуации, у вас все будет в порядке с static_cast
; однако это укрепляет ваше предположение, что вы знаете тип объекта, и нет никаких шансов, что состав исполнителей будет плохим. Если ваше предположение позже станет неверным, вы можете столкнуться с некоторыми загадочными ошибками в вашем коде. Возвращаясь к моему первоначальному вопросу, вы действительно уверены, что компромисс стоит того?
Что касается перечисленных вами вариантов:
Первое на самом деле не похоже на решение, так как хак в последнюю минуту, я ожидаю увидеть, когда кто-то писал код в 3 часа ночи. Функциональность, протекающая к основанию иерархии классов, является одним из наиболее распространенных анти-паттернов, поражающих людей, плохо знакомых с ООП. Не делай этого.
Для второго варианта, который вы перечислили, любой вариант, подобный этому, действительно просто реализуется dynamic_cast
- если вы работаете на платформе с доступными только дерьмовыми компиляторами (я слышал истории о том, что компилятор Gamecube занимал четверть доступных систем). RAM с информацией RTTI) это может стоить, но, скорее всего, вы просто тратите свое время. Вы действительно уверены, что это то, о чем стоит беспокоиться?