我有一个带有以下继承结构的类型橡皮擦:
Holder
/ | \
| | |
Holder_A_1 Holder_B_1 Holder_C_1
| | ...
Holder_A_2 Holder_B_2
... ...
| |
Holder_A_base Holder_B_base Holder_C_base
| | ...
Holder_A_base_2 Holder_B_base_2
... ...
| | |
Anchor Anchor Anchor
(Anchor基类是故意重复的。)
在对象构造后,我构造了一个Holder对象并将其转换为Anchor *进行存储和删除。演员阵容通过Holder_A_base*
完成消除歧义:static_cast<Holder_A_base*>(static_cast<Anchor*>(this))
我的问题是:static_cast
从Anchor*
(如上所述构建)到Holder_B_base*
是否合法,如果我知道Holder
被删除的对象的事实来自这两种类型?
答案 0 :(得分:1)
如果您将static_cast
Holder_A_base_2 *
Holder_B_base *
从Anchor *
改为Holder_B_base *
,那么您的问题就更容易理解了吗?&#34;不,它不是,它不会编译。
从Anchor
到Holder_B_base
的转换将编译,但将是未定义的行为,除非指向的Anchor *
对象是dynamic_cast
的一部分。
如果您需要从任何reshape2::dcast(.~Row, data = dta, fun.aggregate=list)[, -1]
投射到不属于它的类,您可以使用data.frame
。这允许交叉演员。