运行时类型比较

bjs*_*123 1 c++ rtti

我需要找到指针指向的对象类型.代码如下.

//pWindow is pointer to either base Window object or derived Window objects like //Window_Derived.
const char* windowName = typeid(*pWindow).name(); 
if(strcmp(windowName, typeid(Window).name()) == 0)
{
  // ...
}
else if(strcmp(windowName, typeid(Window_Derived).name()) == 0)
{
  // ...     
}
Run Code Online (Sandbox Code Playgroud)

由于我不能使用switch语句来比较字符串,我被迫使用if else链.但是随着我拥有的窗口类型的数量很多,这个if else链变得太长了.我们可以使用开关或更简单的方法检查窗口类型吗?

编辑:我在记录器模块中工作.我想,记录器不应该为了记录目的而调用派生类虚函数.它应该自己做.所以我放弃了虚拟功能方法.

the*_*row 7

首先使用更高级别的字符串构造std::string.
其次,如果你需要检查窗口的类型,你的设计是错误的.
使用Liskov替换原则正确设计.
它基本上意味着任何派生Window对象都可以用它的超类替换.
只有当两者共享相同的接口且派生类不违反基类提供的合同时,才会发生这种情况.
如果需要某种机制来动态应用行为,请使用访问者模式