在我的系统中,低层级对象通过调用+1 级层级对象的函数与高层级对象通信,调用+1 级层级对象的函数,等等,直到函数调用停止在配方处.
有一个Message抽象类,还有很多派生类,分别保存着不同种类的数据。 喜欢:
FruitMessage: string, int
坐标信息: float , float , float
等等等等
我之前提到的那些方法需要 Message 对象,因此这种链式调用是通过一种方法完成的,而不是为所有 Message 类型创建方法。
问题来了,当配方接收到消息对象时。
接收者想知道消息中的内容,因此它可以根据消息类型的需要处理接收到的消息。
(比如FruitMessages中的整数减1,CoordinateMessages中的坐标除以等)
目前我有两个想法,但也许没有一个是正确的,我应该使用第三个。 (请告诉我)
当它不是正确的类型时,配方会对其进行 dynamic_cast。
Message 有一个名为 MessageType 的枚举字段,它在派生类的构造函数中初始化为正确的值,因此 recient 在此过程中仅使用一个 switch-case。
我的问题是裁员是否值得?
dynamic_cast 比整数检查慢
但每次我创建一个新的 Message 类时,我都必须创建一个新的枚举值。
我该怎么办?
最佳答案
两种方式都可以。冗余与速度是软件开发中非常普遍的问题。 我会选择 dynamic_cast,因为冗余是解决错误的第一步,但这完全取决于您,并且取决于您的性能要求。 我在使用 Akka 时看到了非常相似的问题,他们通常使用 dynamic_cast(我的意思是 java/scala 类似物)
关于c++ - dynamic_cast 还是冗余?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41514905/