我有一个具有以下类的 C++ 应用程序:
-
class AAA
-
class BBB
继承自AAA
-
class CCC
继承自AAA
-
class DDD
继承自CCC
(所有类都标记为 public
)
现在我有以下 map :
map <DWORD, AAA*>
我找到一个 AAA
map
中的对象, 通过 DWORD id
, 但现在我想知道 AAA
的类型是什么:
逻辑是这样的:
if(AAA is BBB)
{
...
}
if(AAA is CCC)
{
...
}
if(AAA is DDD)
{
...
}
你知道怎么用C++写吗(不加getType()
的多态函数)?
最佳答案
要求这个表明你做错了。您正在尝试复制虚拟方法的发明目的。只需在您的基类中放置一个虚拟方法。
class AAA
{
public:
virtual void DoSomething() = 0;
}
class BBB : public AAA
{
public:
void DoSomething() { ... }
}
class CCC : public AAA
{
public:
void DoSomething() { ... }
}
class DDD : public AAA
{
public:
void DoSomething() { ... }
}
在你的调用代码中,你的逻辑很简单:
// no need for if() blocks. it's the point of virtual methods.
AAA* somePointer;
...
somePointer->DoSomething();
我知道您可能无法将当前的“dosomething”代码复制/粘贴到其中。但这是您在这种情况下应该使用的模式。也许使用 GetSomeInfo
之类的东西代替 DoSomething
更有意义,调用者可以使用它来做任何需要做的事情。此模式的具体用法取决于您的上下文。
关于C++ 获取对象类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7913966/