У меня есть ручки разных типов внутри иерархии.Полиморфные ручки
class Handle { common data }
class HandleA : Handle { data specific to a }
class HandleB : Handle { data specific to b }
Большинство частей кода касается только ручек. Но некоторые части («менеджеры» для HandleA/HandleB) нуждаются в доступе к данным в дочерних классах. например:
void ManagerA::DoSomething(Handle handle)
{
// needs access to data in handleA
}
Есть ли какое-либо решение этого, которые не связаны кастинг?
Мои идеи до сих пор:
- Сохранение дополнительных данных внутри карты в ManagerA/B и использовать ручку для поиска, что данные (дополнительные Хеш подстановки)
- Есть полиморфные методы в ручках (handle.DoSomething ()), которые называют подходящие методы менеджера (требуется дополнительный указатель в каждом дескрипторе)
- Заверните его и используйте отливки
Любые идеи? Я что-то упускаю?
Благодаря
Почему вы хотите избежать вызова dynamic_cast для доступа к объекту HandleX подкласса? – chollida
Наверное, потому, что у каста есть «Bad Karma» во многих учебниках на C++: свисток: –
Если это непрозрачно, то это действительно ручка? Если вы знаете, что такое дескриптор, и нужно использовать его как подходящий тип, то почему бы не использовать литье? Что случилось с актером? – Pod