Всем привет.
Проблема вроде бы и простая, но не могу придумать нормальное решение.
Есть одна клиент-серверная программа. Есть несколько типов («B», «C», «D»), унаследованных от интерфейса («A»). Объектами этих типов перекидываются между собой всякие классы типа БД-воркера, TCP-сервера, менеджера устройств, etc. Чтобы не загромождать последние кучей сигналов-слотов на каждый тип, в сигналах-слотах передаются смарт-поинтеры на объект типа A, после чего в слоте проверяется, что там за тип вызовом метода а-ля get_type(), указатель приводится к действительному типу и соответствующе обрабатывается. В итоге код загромождается этими switch'ами, что ведёт к понятным проблемам, если понадобится добавить ещё один тип — придётся бегать и править все эти портянки.
Вроде как, можно применить другой способ — перегрузку сигналов/слотов, но тогда для каждого перегруженного сигнала/слота, как я понимаю, надо будет прописывать свой connect, что тоже смотрится не очень. UPD: может нафигачить глобально доступный макрос, который будет вставлять эту кучу коннектов на каждый существующий тип? Тогда достаточно будет модифицировать макрос при введении ещё одного типа.
Хочется, чтобы при добавлении нового типа-наследника «A», места для допиливания были строго локализованы и легко определяемы.
Наверняка есть какое-то решение, до которого я не могу допетрить, может кто подсказать? Или дать ссылку на проэхт, где можно подсмотреть, как делать по красоте?