想象我有這樣的類層次結構:在C++中存儲對象類型的好方法是什麼?
Base
A : Base
B : Base
C : B
我希望能夠從Base
對象(I need string, not enum)
retrive一個string
型。我希望也能到對象類型比較A
類型,例如:
Object *object = new A();
if (object->type() == A::typename())
{
//hooray!
}
現在我刨一個靜態函數添加到每個班級:
static string typename() {return "Different name for each class";}
,然後我將有重新實現Base
功能virtual string type()
每一個派生類:
A: virtual string type() {return typename();} //A::typename
B: virtual string type() {return typename();} //B::typename
...
我覺得這樣的設計看起來醜陋。有更好的方法來實現我的目標嗎?
爲什麼我需要這個: 我正在開發一款遊戲。有一個瓷磚地圖。每個圖塊上都有一個對象數組。有些物體可以放置在其他物體上。所以我想檢查是否允許將對象放在特定的tile中。例如:如果瓷磚有對象類型「鍋」,那麼花可以放在那裏。
你知道了'type_id'對象的? (http://www.cplusplus.com/reference/std/typeinfo/type_info/) – Constantinius 2012-03-15 12:50:15
你究竟想達到什麼目的?如果您希望每個類的特定行爲都實現一個基本方法,該方法將被每個繼承類重寫並實現其特定的行爲。測試「實例」不是面向對象的。 – giorashc 2012-03-15 12:52:59
如果您需要通過您訪問的指針或引用而知道超出您所知的對象類型的信息,則可能需要審查您的OOP設計。 – 2012-03-15 12:54:20