Re[8]: dynamic_cast RTTI проблема
От: Dsmover  
Дата: 14.05.10 14:29
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, Dsmover, Вы писали:


D>>Еще маленький вопрос почти по теме.

D>>Вот есть класс IParameter. Есть наследники от него.
D>>Я хочу в один и тот же обработчик передавать скажем 5 разных наследников (то есть бывает 5 разных сущностей параметров).
D>>Как в этом обработчике лучше проверять, какой конкретный пришел параметер:

К>Сперва нужно ответить — ЗАЧЕМ проверять, какой конкретный параметр.

К>Можно ли решить задачу с помощью виртуальных функций? Пусть каждый наследник умеет по-своему делать ту задачу, которую ты на него взваливаешь. Выдели эту задачу в отдельную функцию-член интерфейса и дёргай.
К>Виртуальные вызовы — точно дешевле и свитча с динамик-кастами, и последовательных динамик-кастов.

К>Вариант со свитчом некрасив потому, что ты задействуешь параллельно сразу два RTTI — штатный (dynamic_cast) и самодельный (GetIdParam).

К>Нужны веские основания для того, чтобы писать самодельный RTTI (например, если идентификаторы прописаны в техническом задании, как неотъемлемая часть предметной области; или, когда требуется ABI с другими языками, что-то вроде COM; но тогда не нужен штатный RTTI, пользуйся только самодельным).

Я хочу передавать разные параметры, в одном случае просто число, иногда строка, иногда структура и т.д, смотря что ждет обработчик при каком событии. Сам класс (наследник от IParameter) является в принципе только хранилищем разного рода данных.
Поясню зачем я все это спрашиваю... Идеалогия MFC SendMessage(hWnd, WM_USER + n, (DWORD) &cstring_str, (DWORD) int_value) мне не нравится кривотой и небезопасностью разбора кастами реальных параметров в WndProc(DWORD lParam, wParam).
Хочется использовать какой-то новый безопасный С++-ый подход.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.