【问题标题】:Message Systems and parameters in OOP?OOP 中的消息系统和参数?
【发布时间】:2011-09-22 06:38:10
【问题描述】:

在 WinAPI 中,WndProc 有 lParam 和 wParam,它们都是 long。这意味着您通常必须将它们类型转换为正确的类型。

我读过 OOP 中的消息系统不需要强制转换,这是一种不好的做法。因此,在像 C++ 这样的语言中,基本消息系统将如何工作,其中每条消息都有 2 个参数,甚至是对象指针,具体取决于消息,但不进行类型转换?

谢谢

【问题讨论】:

  • 它是一个所谓的“消息破解者”。已在<windowsx.h> 中提供,请看一看。您最好的选择是使用已经完成此操作的类库,有很多可用的。
  • WinAPI 和 C++ 是非常不同的东西。在正确的 C++ 设计中,您可以抽象出消息泵。

标签: c++ message-queue


【解决方案1】:

对于一般情况,我怀疑您是否可以不进行 一些 类型转换。

但是,在 C++ 级别设计中,类型转换可以大部分集中。

查找访问者模式。

干杯,

【讨论】:

    【解决方案2】:

    类型转换的问题在于它不安全。 Boost 提供了多种以安全方式进行类型转换的方法。

    如果可以在您的消息系统中发送的数据是明确定义的,仅限于几个可能的选择,那么可以使用boost::variant 对象。变体有点像具有内置访问支持的类型安全联合。

    但是,如果可能的数据集或多或少是任意的,那么您将无法使用variant。您仍然希望保留类型安全性,以便接收消息的人无法将其转换为不同于最初给出的类型的其他类型。在这种情况下,boost::any 是一个不错的选择。是的,您仍然必须使用 any_cast,但如果它的类型不正确,则会失败。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-07
      • 1970-01-01
      • 2012-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多