• C++之typeid的介绍


    成员函数

    typeid 返回一个type_info对象的引用,type_info是C++标准库中的一个类,定义在头文件中
    type_info类的所有成员函数:
    name()
    返回类型的名称。返回一个指向C字符串的指针,该字符串包含类型的名称。

    before(const type_info& other)
    检查当前类型是否在顺序上位于other之前。返回一个布尔值,指示当前类型是否在顺序上位于other之前。

    hash_code()
    返回类型的哈希码。返回一个size_t类型的值,用于唯一标识类型。

    equal(const type_info& other)
    检查当前类型是否与other相等。返回一个布尔值,指示当前类型是否与other相等。

    operator==(const type_info& other)
    检查当前类型是否与other相等。返回一个布尔值,指示当前类型是否与other相等。

    operator!=(const type_info& other)
    检查当前类型是否与other不相等。返回一个布尔值,指示当前类型是否与other不相等。

    operator<(const type_info& other)
    检查当前类型是否在顺序上小于other。返回一个布尔值,指示当前类型是否在顺序上小于other。

    operator<=(const type_info& other)
    检查当前类型是否在顺序上小于等于other。返回一个布尔值,指示当前类型是否在顺序上小于等于other。

    operator>(const type_info& other)
    检查当前类型是否在顺序上大于other。返回一个布尔值,指示当前类型是否在顺序上大于other。

    operator>=(const type_info& other)
    检查当前类型是否在顺序上大于等于other。返回一个布尔值,指示当前类型是否在顺序上大于等于other。

    用法举例

    1)检查类型:可以使用typeid来检查对象的类型。例如,可以比较typeid返回的type_info对象与预期类型的type_info对象是否相等,以确定对象是否为预期类型。

    if (typeid(obj) == typeid(ExpectedType)) {  
      // obj 是 ExpectedType 类型  
    }
    
    • 1
    • 2
    • 3

    2)获取类型名称:可以使用typeid返回的type_info对象的name()函数来获取类型的名称。这可以用于日志记录或调试。

    std::cout << "Object type: " << typeid(obj).name() << std::endl;
    
    • 1

    3)用于异常处理:可以将typeid与异常处理结合使用,以便在捕获异常时获取有关异常类型的信息。

    try {  
      // 可能抛出异常的代码  
    } catch (const std::exception& e) {  
      std::cout << "Caught exception of type: " << typeid(e).name() << std::endl;  
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    4)动态类型转换:可以使用typeid进行动态类型转换。在转换之前,可以使用typeid检查对象的类型,以确保它是目标类型或目标类型的子类型。然后,可以使用dynamic_cast进行转换。

    if (typeid(obj) == typeid(TargetType) || typeid(obj) == typeid(TargetType)) {  
      TargetType* ptr = dynamic_cast<TargetType*>(&obj);  
      // 使用 ptr 进行转换后的操作  
    }
    
    • 1
    • 2
    • 3
    • 4
  • 相关阅读:
    神经网络的三种训练方法,神经网络训练全过程
    【Java面试】Mysql事务的实现原理
    Spring boot项目
    clang插件对llvm源码插桩,分析函数调用日志(1)
    数商云:解析B2B2C多用户商城系统架构设计思路,开启智能商城新时代
    docker部署oracle 19c
    漏洞概述-0day漏洞利用原理(0)
    R语言tidycmprsk包分析竞争风险模型
    android studio 找不到设备
    怎么在r里导入自己下载的基因芯片数据
  • 原文地址:https://blog.csdn.net/techenliu/article/details/133361774