【发布时间】:2017-10-17 18:27:23
【问题描述】:
我有一个具有以下继承结构的类型橡皮擦:
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))
我的问题是:如果我知道 Holder 被擦除的对象来自这两种类型,那么 static_cast 从 Anchor*(如上所述构造)到 Holder_B_base* 是否合法?
【问题讨论】:
标签: c++ casting multiple-inheritance type-erasure