Системы сообщений и параметры в ООП? - PullRequest
0 голосов
/ 22 сентября 2011

В WinAPI у WndProc есть lParam и wParam, которые являются длинными. Это означает, что вам, как правило, приходится вводить их в правильный тип.

Я читал, что системам сообщений в ООП не нужно кастовать вещи, и что это плохая практика. Таким образом, на языке, подобном C ++, как будет работать базовая система сообщений, где каждое сообщение имеет 2 параметра или даже указатели объекта, в зависимости от сообщения, но без преобразования типов?

Спасибо

Ответы [ 2 ]

0 голосов
/ 22 сентября 2011

Проблема с приведением типов заключается в том, что это небезопасно. Boost предоставляет несколько способов безопасного создания типов.

Если данные, которые могут быть отправлены в вашей системе сообщений, четко определены, ограничены несколькими возможными вариантами, то можно использовать объект boost::variant. Варианты - это что-то вроде безопасных для типов союзов со встроенной поддержкой посещений.

Однако, если набор возможных данных более или менее произвольный, вы не сможете использовать variant. Вы все еще хотите сохранить безопасность типов, чтобы лицо, получающее сообщение , не могло привести его к другому типу, отличному от того типа, которому оно было изначально присвоено. В этом случае boost::any - хороший выбор. Да, вам все равно придется использовать any_cast, но это не удастся, если он неправильного типа.

0 голосов
/ 22 сентября 2011

В общем случае, я сомневаюсь, что вы можете обойтись без некоторых типов.

Однако в дизайне уровней C ++ типизация может быть в основном централизованной.шаблон посетителя.

Приветствия & hth.,

...