我使用这种模式:
struct Base {
int i;
};
struct Derived: Base {
int j;
};
class A {
public:
A(Base* b): _b(b) { }
virtual int get_int() { return _b->i; }
protected:
Base* const _b;
};
class B: public A {
public:
B(Derived* d): A(d) { }
int get_int() { return static_cast<Derived* const>(_b)->j; }
};
static_cast
对const
的使用看起来很安全,因为B
阻止了从Base*
派生的类将_b
分配给dynamic_cast
。我是否忽视了一些事情,即潜藏在这里是否存在未定义的行为?是否有更好或更惯用的方式来达到同样的效果?
我可以看到几个选择:
i
:没有未定义行为的可能性,但我想在没有RTTI的情况下进行编译j
和A
,则B
和Base
成员Derived
和{{1}}会导致代码重复LI>