gpt4 book ai didi

c++ - 运行时类型比较

转载 作者:太空宇宙 更新时间:2023-11-03 10:21:28 25 4
gpt4 key购买 nike

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

//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)
{
// ...
}

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

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

最佳答案

首先对字符串使用更高级别的构造,例如 std::string
第二,如果你需要检查窗口的类型,你的设计是错误的。
使用 Liskov substitution principle正确设计。
它基本上意味着任何派生的 Window 对象都可以用它的父类(super class)替换。
只有当两者共享相同的接口(interface)并且派生类不违反基类提供的契约时才会发生这种情况。
如果您需要某种机制来动态应用行为,请使用 Visitor Pattern

关于c++ - 运行时类型比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3519853/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com