0

假设X<T>是一个以类为参数的模板类,A并且B是从不涉及多重继承或虚拟继承的情况下B派生的类(即在andA之间进行转换时不需要调整指针)。AB

X<A*>从to执行电锯重新解释转换是否安全X<B*>?反之亦然?当然, aX<A*>是 no X<B*>,但是这些类不应该总是共享相同的行为吗?因为使用了指针,所以内存布局应该是相等的。因此,让方法对X<B*>实际上是X<A*>.

当然,这会以某种方式破坏类型安全,因为我可以将一个元素插入A*到 anX<B*>中,但这超出了这个问题的范围。

4

2 回答 2

1

如果你真的需要它,最好写这样的东西。

X<A*> a(new B());
X<B*> b( dynamic_cast<B*> ( a.get_pointer() ) );
if(b.get_pointer() != NULL)
{
    ...
}
于 2012-06-05T11:59:30.010 回答
0

不,你不能。如果 B 属于多态类,则将 B* 转换为 A* 可能会更改指针的值。一般来说,使用 reinterpret_cast 从来都不是安全的,如果你仍然需要它,那么你可能写错了(在某些情况下,你需要它,但这不是其中之一)。

顺便说一下,模板可以专门用于模板参数,因此 X 和 X 甚至可能没有相同的内部结构。

于 2012-08-13T00:52:03.990 回答