当前位置: 首页 > news >正文

typeid学习

1、概述

typeid是运行时类型识别,可以在运行时判断一个变量或对象的类型。

2、应用场景

2.1、在继承体系中判断具体对象类型
场景:假如函数参数是基类指针,但是可能指向派生类对象,想判断实际指向的哪个类。

#include <iostream>
#include <typeinfo>
using namespace std;// 基类:代表不同类型的员工
class Employee {
public:virtual ~Employee() {} // 必须有虚函数才能使用 typeid 正确识别多态类型virtual void work() = 0;
};class Engineer : public Employee {
public:void work() override { cout << "工程师在写代码" << endl; }
};class Manager : public Employee {
public:void work() override { cout << "经理在开会" << endl; }
};// 一个函数,接收任何 Employee* 类型的指针
void analyzeEmployee(Employee* emp) {// 使用 typeid 判断 emp 实际指向的对象类型if (typeid(*emp) == typeid(Engineer)) {cout << "分析结果:这是一个工程师" << endl;} else if (typeid(*emp) == typeid(Manager)) {cout << "分析结果:这是一个经理" << endl;} else {cout << "分析结果:未知员工类型" << endl;}
}int main() {Engineer eng;Manager mgr;Employee* ptr1 = &eng; // 基类指针指向 EngineerEmployee* ptr2 = &mgr; // 基类指针指向 ManageranalyzeEmployee(ptr1); // 输出:这是一个工程师analyze_employee(ptr2); // 输出:这是一个经理return 0;
}

2.2、模版函数中使用

    template<typename T>static bool GetValue(rapidjson::Value& doc, const char* key, T& value){assert(doc.IsObject());if (!doc.HasMember(key)){return false;}const rapidjson::Value& memberValue = doc[key];if (typeid(bool) == typeid(T) && memberValue.IsBool()){value = (T)memberValue.GetBool();return true;}else if (typeid(int) == typeid(T) && memberValue.IsInt()){value = (T)memberValue.GetInt();return true;}else if (typeid(unsigned) == typeid(T) && memberValue.IsUint()){value = (T)memberValue.GetUint();return true;}else if (typeid(int64_t) == typeid(T) && memberValue.IsInt64()){value = (T)memberValue.GetInt64();return true;}else if (typeid(uint64_t) == typeid(T) && memberValue.IsUint64()){value = (T)memberValue.GetUint64();return true;}else if (typeid(double) == typeid(T) && memberValue.IsDouble()){value = (T)memberValue.GetDouble();return true;}else if (typeid(float) == typeid(T) && memberValue.IsFloat()){value = (T)memberValue.GetFloat();return true;}else{assert("Invalid template type or memberValue type!");}return false;}

学习链接:https://github.com/0voice

http://www.dtcms.com/a/412107.html

相关文章:

  • 自动识别快递,查询单号自动查询物流快递全部详情
  • daily notes[55]
  • 如何创办一个赚钱的网站谷歌推广新手教程
  • 软件测试技术实验报告
  • wordpress中文语言包下载整站seo排名要多少钱
  • 860. 柠檬水找零
  • 协会网站建设模板开发者账号注册流程
  • 企业seo网站推广小程序制作网站
  • 因果推断中的d-分离图模型
  • Markdown 完整使用指南
  • 深度解析Docusaurus:现代化静态站点生成器的技术架构与创新实践
  • rgb565和rgb565A8的区别
  • 2023免费网站推广wordpress模板最新
  • 视频网站文案开网站需要什么流程
  • 单仁资讯做网站怎样网站商城与网站区别吗
  • 农林网站建设西安有关做网站的公司
  • 基于PLC的粉料输送系统(论文+源码)
  • IP代理在数据采集中的重要性
  • 网站制作理念暴雪战网
  • 【入门级-算法-6、排序算法: 计数排序】
  • 传奇网站架设方法做网站赔钱了
  • 智慧停车大屏改造详细修改文档
  • 做网站需要icp吗园林景观设计平面图
  • Visual Studio 插件 - 喝水提醒
  • 景区网站建设 现状中俄跨境电商平台有哪些
  • 福建省教师空间建设网站稿定设计网页版登录
  • 摄影网站都有什么网站应用系统设计方案
  • 2014-2024高考真题考点分布详细分析(另附完整高考真题下载)
  • 天津站内关键词优化手机搜索引擎
  • asp网站源码东莞商城网站建设公司