Здравствуйте, Dsmover, Вы писали:
D>Еще маленький вопрос почти по теме. D>Вот есть класс IParameter. Есть наследники от него. D>Я хочу в один и тот же обработчик передавать скажем 5 разных наследников (то есть бывает 5 разных сущностей параметров). D>Как в этом обработчике лучше проверять, какой конкретный пришел параметер:
Сперва нужно ответить — ЗАЧЕМ проверять, какой конкретный параметр.
Можно ли решить задачу с помощью виртуальных функций? Пусть каждый наследник умеет по-своему делать ту задачу, которую ты на него взваливаешь. Выдели эту задачу в отдельную функцию-член интерфейса и дёргай.
Виртуальные вызовы — точно дешевле и свитча с динамик-кастами, и последовательных динамик-кастов.
Вариант со свитчом некрасив потому, что ты задействуешь параллельно сразу два RTTI — штатный (dynamic_cast) и самодельный (GetIdParam).
Нужны веские основания для того, чтобы писать самодельный RTTI (например, если идентификаторы прописаны в техническом задании, как неотъемлемая часть предметной области; или, когда требуется ABI с другими языками, что-то вроде COM; но тогда не нужен штатный RTTI, пользуйся только самодельным).