【发布时间】:2012-08-13 08:52:03
【问题描述】:
假设X<T>是一个以类为参数的模板类,A和B是B从A派生的类,不涉及多重继承或虚拟继承(即不需要调整指针时)在A 和B 之间转换)。
从X<A*> 到X<B*> 执行电锯重新解释转换是否安全,反之亦然?当然,X<A*> 不是X<B*>,但是这些类不应该总是共享相同的行为吗?因为使用了指针,所以内存布局应该是相等的。因此,让X<B*> 的方法在实际上是X<A*> 的实例上运行可能没问题。
当然,这会以某种方式破坏类型安全,例如我可以将A* 的元素插入X<B*>,但这超出了本问题的范围。
【问题讨论】:
-
一般来说,没有。
reinterpret_cast不是很有用。 -
为什么?代码会在哪里中断?
-
只需要写一个模板化的转换操作符。
-
@gexicide 某处。我还没有看到任何代码。
-
那么代码应该类似于 X b = reinterpret_cast
>(new X());