沒有RTTI和虛擬功能。C++對象的存儲類型,有什麼選擇更好?
我遇到2個不同共同解決方案,以提供物體的類型:
與虛擬方法調用,並保持ID的方法內:
class Base {
public:
virtual ~Base();
virtual int getType() const =0;
};
class Derived : public Base {
public:
virtual int getType() const { return DerivedID; }
};
帶內嵌方法調用,並保持ID基類:
class Base {
int id_;
public:
virtual ~Base();
inline int getType() const { return id_; }
};
class Derived : public Base {
public:
Derived() { id_=DerivedID;}
};
什麼是一般的更好的選擇,他們的利弊是什麼?
如果你選擇第二個,而是讓Base的受保護的構造函數將id作爲參數 - 那麼至少它將始終被初始化並且實現者被迫提供它 – stijn
堅持使用接口! –