C++ 获取对象类型

标签 c++ object

我有一个具有以下类的 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/

相关文章:

java - 调用 Object.wait() 后设置对象的字段

javascript 对象 - 如何绑定(bind)到 "this"

c++ - Mat与Mat1b/Mat3b之间的转换

C++将时间字符串转换为纪元的秒数

c++ - 无法在 OS X 上包含 opencv3

javascript - ES6 将整个对象解构为 this

c++ - 返回在transform中用lambda构造的对象

facebook - 内置对象的开放图形操作

C++:利率不会显示为 .06、.6 等

c++ - 使用msvc 15在Qt5.13中编译CUDA代码