我有以下类定义:
class BaseHandle { /* Lots of things */ };
class VertexHandle : public BaseHandle {
/* Only static members and non-virtual functions, default dtor */ };
class EdgeHandle : public BaseHandle { /* Dito */ };
class FaceHandle : public BaseHandle { /* Dito */ };
所有类都没有虚函数或基类。
派生类只从BaseHandle
派生,并且不添加任何非静态成员,也不添加非默认析构函数。
我想将VertexHandle
、EdgeHandle
和FaceHandle
保存在同一个向量中:
std::vector<BaseHandle*> handles;
但是,如果我检索BaseHandle
对象并想将它们dynamic_cast
到派生对象,它不起作用,因为这些类不是多态的(也许这是我的解释,我可能是错误的)。
我如何实现一个通用的BaseHandles
向量?我应该提到,我无法更改类定义,因为它们是第三方库的一部分。
typeid
和static_cast
的组合属于问题领域,而不是解决方案领域。你正在重新发明旧的、疲惫不堪的class BaseHandle { int TYPE; ... }; switch (TYPE) { ...
习语,这被认为是一个巨大的混乱。 - n. m.BaseHandle
更多的基类?它们中是否有用户定义的析构函数? - Deduplicator