Я работаю над системой событий, которая позволяет триггерам отправлять события либо одному обработчику, либо всем обработчикам, связанным с данным типом. Первая - базовая функциональность карты, а последняя в основном соответствует счету ... если вы не хотите полиморфного поведения.Реализация карты типов с полиморфным поиском
class Parent {};
class Child : public Parent {};
// ...
Parent p; Child c;
Trigger trigger;
Handler h1(&p), h2(&c);
trigger.sendToType<Child>(Event()); // sends the event to h2; OK
trigger.sendToType<Parent>(Event()); // sends the event to h1 only; NO
Обработчики регистрируются в зависимости от типа указателя, с которым они созданы. «Тип» h1
- Parent
, а «тип» h2
- Child
. При базовом сопоставлении идентификаторов типов, используемых в диспетчере (только некоторое целочисленное число, сопоставленное с вектором Handler*
), невозможно отправить события детям при отправке родителям.
Единственное решение я могу думать несколько недостатков:
- O (N) поиск для отправки к типу.
- Имея добавить отражение в кодовую
- высокое количество ручной настройки
В идеале я хотел бы решение, где над головой сводится к (число детей, + 1 для фактического типа) на поиски отправьте по типу, но это может быть невозможно. Любой совет?
Это всегда меня беспокоит, когда люди, которые не знают, как что-то делать, делают всевозможные предположения о том, как вещи должны быть сделаны в их вопросе. «тривиально» «естественно» «К сожалению». Похоже, вы уже создали свой ум. Вы все это время пытались рассказать нам, что у вас есть, и недостаточно говорить о том, что вы действительно пытаетесь решить. Вы уже углубили себя в решение проблемы, которую никто не знает. Этот пост, как есть, лучше подходит для codereview.stackexchange.com – xaxxon
как насчет использования dynamic_cast? – Evgeniy
@xaxxon жаль, если я натолкнулся на снисхождение или невосприимчивость, это было не мое намерение. Причина, по которой я предоставлял столько информации, состояла в том, что я подумал, что это может прояснить то, что я ищу. Я удалю пух, если это станет вопросом лучше. – budjmt