没有RTTI和虚函数.
我遇到了两种不同的常见解决方案来提供对象的类型:
使用虚方法调用并在方法中保留id:
class Base {
public:
virtual ~Base();
virtual int getType() const =0;
};
class Derived : public Base {
public:
virtual int getType() const { return DerivedID; }
};
Run Code Online (Sandbox Code Playgroud)
使用内联方法调用并在基类中保留id:
class Base {
int id_;
public:
virtual ~Base();
inline int getType() const { return id_; }
};
class Derived : public Base {
public:
Derived() { id_=DerivedID;}
};
Run Code Online (Sandbox Code Playgroud)
一般来说什么是更好的选择,它们的利弊是什么?
如果您选择在每个派生类中都带有 ID 的第二个选项,则您创建的每个对象中都会有一个额外的成员。如果您使用虚函数的第一个选项,则虚函数表中将有一个额外的指针,该指针每个类仅存在一次,而不是每个对象。如果类将具有多个虚函数,则第一个选项显然更好。即使不是,我认为它更符合人们的期望。
| 归档时间: |
|
| 查看次数: |
197 次 |
| 最近记录: |