![]() |
1
7
当然,动态类型转换的实现会因编译器而异。 在VisualC++中,VToT指向一个包含所有关于结构的RTTI的结构。因此,动态类型转换涉及取消对此指针的引用,并根据请求的类型检查“实际”类型,如果不兼容则抛出异常(或返回空值)。它基本上相当于您描述的系统。不是特别慢。 你的设计听起来也有点离谱——你有一个工厂方法,它会忘记一个对象的真实类型,然后你会立即想要取消忘记这个信息。也许您应该在将一个类型取消强制转换为工厂方法或基类本身的虚拟方法时移动您所执行的逻辑。 |
![]() |
2
4
唯一正确的答案是“试一下”。 |
![]() |
3
3
当人们说动态投射很慢时,这只是一个经验法则。动态角色扮演或多或少会做你正在做的事情。它很慢,因为它需要几个内存访问。有点像人们说虚拟功能很慢。您正在进行一些快速的操作(函数调用),并添加一些内存访问。这是一个明显的减速(因为一路到随机存取存储器和返回可能需要几百个周期),但对大多数人来说,只要不经常做(经常值很大),它就不重要了。 |
![]() |
4
3
这取决于您如何管理消息。当我有一个
使用
为什么您需要所有消息都继承自一个公共消息?有什么共同点? 我将添加另一个完全不使用继承的设计
解析将帧解析为msg,或者在解析失败时引发异常。 我看到了另一个告诉您使用虚拟函数的答案。我真的不认为这种面向对象的消息设计有任何优势。 |
![]() |
5
2
a)这听起来很像过早的优化。 b)如果您的设计需要对dynamic cast进行如此多的调用,以至于您担心它,那么您肯定需要查看您的设计并找出它的问题所在。 c)正如前面的答案所说,回答是否更快的唯一方法是使用分析器(或等效工具)并进行比较。 |
![]() |
6
1
你关注的是速度,但是正确性呢? 潜在的问题是你确定你不会犯错误吗?尤其是,您可能会尝试以这样的方式包装铸造方法:
为了将测试和强制转换嵌入到单个函数中,从而避免以下错误:
或者显而易见的:
诚然不多,但也不多大的努力。 另一方面,您还可以通过应用运行时调度来检查技术。
等。。。 |
![]() |
7
0
您已经有了一个抽象的基类“message”。使用它作为接口来隐藏foomeMessage和barMessage的实现细节。 我想,这就是为什么你选择了这种方法,或者不是吗? |
![]() |
8
0
我知道这篇文章有点过时,但我和这个问题的作者有着完全相同的问题。
我还需要向下转换一个抽象基类(
我也使用
在当前项目中使用C++ 11,我想在这个答案中勾勒出我的解决方案。以下解决方案与Vicente Boet Escriba提供的解决方案非常相似,但使用 现代C++ .
|
![]() |
9
-1
我没有看到任何关于这个问题的答案,但是你不能通过网络发送C++对象并期望它们完整地到达。虚拟表是根据发送计算机中的内存状态设置的,很可能接收计算机在同一位置上不会有东西。这通常也会使RTTI失败(这是动态资源分配使用的),因为RTTI通常与vtable一起实现。 |
![]() |
Georg · 多态性:这种(潜在的密集)使用static_是否致命? 7 年前 |