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

C++反射

时间:2024-03-21 21:24:36浏览次数:30  
标签:反射 函数 tuple int C++ Person traits 模板

反射

教程
让程序看到自己的数据,并且能够对数据进行操作

类型萃取

对类型做萃取,有一组混合类型,将特定类型获取出来
核心思路:使用模板来匹配查找

例子:指针类型萃取

解除一层指针,三级变二级,二级变一级

template <typename T>
struct remove_pointer {};

template <typename T>
struct remove_pointer<T*> {
  using type = T;
};

int main()
{
  using type = remove_pointer<int*>::type; //type 类型为int
  return 0;
}

固定流程

  1. 声明一个标准的模板用来声明功能
template <typename T>
struct remove_const{};
  1. 声明定义需要萃取的类,比如获取const修饰的类型
template <typename T>
//匹配参数,需要使用T来拼凑
struct remove_const<const T>{
  using type = T;
};
  1. 使用时需要使用相应的传入参数,然后调用remove_const就可以获得T
int main()
{
  const int a;
  using type = remove_const<a>::type;
}

成员函数和普通函数的模型

对于一个普通函数int func(double) 其函数指针可以表示为int(double)
而对于一个成员函数 int ClassA::func(double) 其函数指针为int (ClassA::
)(double)
对于一个成员变量 int ClassA::c 其指针为 int (ClassA:

标签:反射,函数,tuple,int,C++,Person,traits,模板
From: https://www.cnblogs.com/XTG111/p/18088266

相关文章

  • C++版数据结构与算法
    大家好,今天开始给大家每天带来C++版的数据结构与算法,后面也会包括C#的系统学习。这段代码是一个C++实现的排序算法集合。其中包括选择排序(selectionsort)、冒泡排序(bubblesort)、插入排序(insertionsort)和归并排序(mergesort)。算法后越往后越难,此次做这个系列博客,是想从......
  • 23种设计模式核心思想及代码实现(Java C++)
    目录代码OOP七大原则策略模式单例模式观察者模式装饰模式抽象工厂模式工厂模式简单工厂模式工厂模式抽象工厂模式三种工厂模式的区别简单工厂模式和策略模式的不同pipeline模式职责链模式代理模式静态代理动态代理......
  • 语音转文字——sherpa ncnn语音识别离线部署C++实现
    简介Sherpa是一个中文语音识别的项目,使用了PyTorch进行语音识别模型的训练,然后训练好的模型导出成torchscript格式,以便在C++环境中进行推理。尽管PyTorch在CPU和GPU上有良好的支持,但它可能对资源的要求较高,不太适合嵌入式环境或要求轻量级依赖的场景。考虑到模......
  • C++ this指针
    1. this指针的用处一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。也就是说,即使你没有写上this指针,编译器在编译的时......
  • 复试C++16真题_程序设计1_输出句子中每个单词长度
    输入一行文本,按照相应格式输出每个单词的长度#include<iostream>usingnamespacestd;#include<string>#include<vector>#include<iomanip>intmain(){stringsen="qweasdaxszfsfsddwfas";//getline(cin,sen);如果要把输入的空格的记录......
  • C++的内存管理
    1.C/C++内存分布我们可以先来了解一下具体的内存区域分布图,通过一个代码 那么我们想为什么要划分这些区域?为了方便管理因为我们在程序中有不同类型的数据(静态,局部,全局等)比如生命周期的不同,放到不同的区域进行管理哪个是我们重点关注的?堆区。因为其他区域不用管释......
  • c++算法学习笔记 (15) 质数
    1.试除法判断某个数是否为质数#include<iostream>usingnamespacestd;constintN=50005;boolis_prime1(intn){//暴力写法:O(n)if(n<2)returnfalse;for(inti=2;i<n;i++){if(n%i==0)returnfalse;......
  • C++ 纯虚函数
    纯虚函数优点防止派生类忘记实现虚函数,纯虚函数使得派生类必须实现基类的虚函数。在某些场景下,创建基类对象是不合理的,含有纯虚拟函数的类称为抽象类,它不能直接生成对象。声明方法:在基类中纯虚函数的方法的后面加=0。virtualvoidfuntion()=0;virtualstd::stringGetN......
  • C++ 空基类优化
    1.继承体系中的内存模型我们都知道,在C++中,不存在大小是零的类。即便是空类,也要占据一个字节,否则无法比较两个空类对象是否是同一个对象(在C/C++中,默认使用地址来判断两个变量是否是同一个)。classBaseEmpty{public: BaseEmpty(){std::cout<<"Baseaddress:"<<this......
  • c/c++|gdb 单点调试 | 多点调试|查看栈中信息|具体变量
    设置断点,有什么好处,废话就不说了,可以去看手册设置断点,参考bxxx.cpp:n某个源文件的某行bfunc1调试某个函数编译g++test_gdb_watch.cpp-g设置断点bpowerr出现报错Missingseparatedebuginfos,use:debuginfo-installglibc-2.17-326.el7_9.x86_64libg......