想象我有这样的类层次结构:在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