В моей системе низкие объекты hiearchy общаются с объектом высокой hiearchy посредством функции вызова объекта hiearchy уровня +1, который вызывает функцию объекта hiearchy уровня +1 и т. Д. И т. Д., До тех пор, пока вызов функции не остановится у получателя.dynamic_cast или избыточность?
Существует абстрактный класс сообщений, и есть много деривативных классов, которые содержат разные типы данных. как:
FruitMessage: строка, Int
CoordinateMessage: поплавок, поплавок, поплавок
и т.д. и т.д.
И те методы, которые я упоминал ранее хочу объекты так Сообщение эта цепочка вызовов выполняется с помощью одного вида методов вместо создания методов для всех типов сообщений.
Проблема возникает, когда получатель получает объект Message.
recipent хочет знать то, что в этом сообщении, поэтому он может процесс получает сообщение, как тип сообщения требует.
(как это уменьшает число на 1 в FruitMessages, делит координаты в CoordinateMessages и т.д.)
В настоящее время у меня есть две идеи, но, может быть, ни один из них не является правильным, и я должен использовать третий , (скажите, пожалуйста)
Редитор dynamic_casts его, пока он неправильный.
Сообщение имеет поле перечисления, называемое MessageType, которое инициализируется в конструкторе производного класса на правильное значение, поэтому получатель просто использует случай переключения во время процесса.
Мой вопрос в том, что это стоит избыточности?
dynamic_cast медленнее, чем целочисленный проверки
, но каждый раз, когда я создаю новый класс сообщений, я должен создать новое значение перечисления.
Что мне делать?
Я не уверен, что понял вопрос. Я чувствую, что [виртуальные функции] (http://en.cppreference.com/w/cpp/language/virtual) - это то, что вы ищете. –
Я бы рекомендовал шаблон посетителя: https://sourcemaking.com/design_patterns/visitor/cpp/2 –
Упс, отредактированный. Вы хотите создать виртуальную функцию GetType() и переопределить ее в каждом подклассе, чтобы она вернула правильное значение, соответствующее подклассу? – Tudvari