首页 > 编程语言 >C++ 反射机制

C++ 反射机制

时间:2022-11-03 10:44:59浏览次数:63  
标签:反射 对象 支持 C++ 类型 机制

前言

反射的概念:指程序在运行时,访问、检测和修改它本身状态或行为的一种能力。wikipedia

简单的来说,就是一种自描述和自控制的能力。如果联想到镜子,就可以很好的理解,你能通过镜子看到自己,包括自己的动作,自己的外表。唯一不同的地方是,计算机语言的反射能力还包含对看到的自己采取措施。

反射的作用

在计算机编程语言中,反射机制可以用来:

获取类型的信息,包括属性、方法
动态调用方法
动态构造对象
从程序集中获得类型
反射的缺点

性能:反射可以理解成是一种解释操作,这个过程总是要慢于直接调用的。当然,性能问题的程度是可以控制的,如果程序在很少涉及的地方使用,性能将不会是一个问题。
反射模糊了程序内部实际发生的事情,会比直接代码更加复杂。
缺点不能掩饰其优点,针对不同的场景使用合理的技术才是最高境界。

反射的使用场景

序列化(Serialization)和数据绑定(Data Binding)
远程方法调用(RMI)
对象/关系数据映射(O/R mapping)
关于c++的反射

我们知道,Java是原生支持反射机制的,通过Class类可以通过名称获得类对象,进一步操作。Python也支持反射机制,可以通过globals()获取对象map,也可以通过inspect模块,提供了自省的方法。但是C++呢?C++原生不支持反射机制,RTTI(运行时类型识别)也仅仅提供了类型的判断。

开闭原则是设计模式的原则之一,对修改是封闭,对扩展开放。一般来说,需要我们对类进行抽象,针对抽象的类进行编程。许多的设计模式中,为了能够满足这一点,我们常常使用一个配置文件,映射字符串与类型。然后通过反射机制获得字符串对应的对象,然后自动装配已达到易于扩展的目的。

本文主要介绍两个小的场景如何实现C++反射。实际上,C++并不是对反射支持的很好,要支持动态和静态反射,还需要慢慢去寻找,我给出一些资料

 

 

资料:https://blog.csdn.net/brighlee/article/details/72885219

标签:反射,对象,支持,C++,类型,机制
From: https://www.cnblogs.com/xiaohaigegede/p/16853648.html

相关文章

  • C/C++ 常识
    多态分为静态多态和动态多态1.静态多态:静态多态是编译器在编译期间完成的,编译器会根据实参类型来选择调用合适的函数,如果有合适的函数就调用,没有的话就会发出警告或者......
  • 【c&c++】 cjson使用_Keil环境下Jansson解析库的使用——基于STM32F103
    前言之前我曾经写过几个JSON解析库的使用方法:Qt平台下使用QJson解析和构建JSON字符串使用cJSON库解析JSON使用cJSON库构建JSON对于嵌入式开发,比较常用的就是cJSON解析......
  • 转载文章 c++调用yolov4模型进行目标检测-使用yolov4官方接口
    前言yolo系列用c写的,在工程中的部署特别方便。4月份yolov4横空出世,之前试了试效果,精度确实有了很大的提升,AB大神nb。最近需要在C++项目中使用yolov4,尝试了opencv的调用(见......
  • 【c&c++】[C++]使用Jansson生成与解析json字符串
    安装配置序列化与反序列化生成Json解析JsonJansson是一个用于解码、编码、操控JSON的C库:简单直观的API和数据模型没有依赖项完整的Unicode支持(UTF-8)安装 ......
  • C++语法
    C++常量和变量变量的定义方式:const类型名字{};直接使用值#define名字值常量定义方式:类型名字{};类型名字=初始值;不管是常量还是变量,本质都是在内存中申......
  • Java反射
    一Java安全可以从反序列化漏洞开始说起,反序列化漏洞⼜可以从反射开始说起正是反射使得Java拥有了动态特性,对象可以通过反射获取他的类,类可以通过反射拿到所有⽅法(包括私......
  • 第十三届蓝桥杯省赛C++B组
    《X进制减法》题目连接:https://www.acwing.com/problem/content/4407/贪心,数学推导  我们先来看一下这个65是如何算出来的:321:第一位为二进制,则逢2进1,ans+=1;......
  • tensorflow1.x——如何在C++多线程中调用同一个session会话
    相关内容:tensorflow1.x——如何在python多线程中调用同一个session会话 =================================================......
  • C++ 常量引用,用来修饰形参,防止误操作
    voidfunc(constint&b){b=1000;//cout<<b<<endl;}intmain(){inta=10;//constint&b=10;//10是一个常量inta=10实际是c......
  • JAVA-猜数字游戏功能实现事务机制
    packagecom.itheima;importjavax.swing.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.util.Random;publicclassCAI......