gpt4 book ai didi

c++ - type_info 指针可以用来区分 C++ 中的类型吗?

转载 作者:行者123 更新时间:2023-11-30 02:08:20 28 4
gpt4 key购买 nike

我有一组多态 C++ 类,它们都由同一个模块 (Windows DLL) 实例化。现在有两个指向此类的指针并调用了 typeid:

SomeCommonBase* first = ...; //valid pointer
SomeCommonBase* second = ...; //valid pointer
const type_info& firstInfo = typeid( first );
const type_info& secondInfo = typeid( second );

我可以比较检索到的 type_info 地址吗

if( &firstInfo == &secondInfo ) {
//objects are of the same class
} else {
//objects are of different classes
}

或使用==

if( firstInfo == secondInfo ) {
//objects are of the same class
} else {
//objects are of different classes
}

检测对象是(完全)属于同一类还是属于不同类?当从同一模块中实例化对象时,是否保证可以正常工作?

最佳答案

在我写这篇文章时,您的代码是

SomeCommonBase* first = ...; //valid pointer
SomeCommonBase* second = ...; //valid pointer
type_info& firstInfo = typeid( first );
type_info& secondInfo = typeid( second );

它不应该编译,因为 typeid 返回对 const 的引用。

更糟糕的是,您正在询问有关指针的类型信息。两个指针都是 SomeCommonBase* 类型,因此可以保证它们是同一类型。而是询问有关指向对象的类型信息。

也就是说,正如@DeadMg 所说,您还需要使用operator== 来比较类型信息对象。

C++ 标准没有解决动态库的问题。但在任何给定的 Windows 模块中,您应该是安全的。

干杯,

关于c++ - type_info 指针可以用来区分 C++ 中的类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7024414/

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