C++之获取变量信息名称、类型typeid

2023-12-11 04:04

本文主要是介绍C++之获取变量信息名称、类型typeid,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

摘要

对于C++工程量级比较庞大的代码,代码中的变量、类、函数、结构体的识别都是一件让人头疼的事情,一方面代码越写越多,内容越来越丰富,但是没有办法对已有的代码框架进行高度的整合提炼;另一方面对新人逐渐不友好,增加了学习成本。那么如何获取一些类别信息并进行统筹管理呢?

一、typeid

在C++中,typeid是一个用于获取对象类型的运算符。它可以在运行时获取对象的类型信息,包括类名和类型转换。typeid运算符通常与动态类型识别(RTTI)一起使用。RTTI是一种在运行时获取类型信息的技术,它允许程序在运行时检查对象的类型并执行相应的操作。

二、技巧

1.变量名称获得


#include <string>#define varName(x) #x  //宏定义获取字符信息int main(int argc, char *argv[])
{int adsadf;string name1 = varName(myVariable);}

2.类型获得

#include <iostream>int main(int argc, char *argv[])
{int adsadf;std::cout << "Variable name: " << typeid(adsadf).name() << std::endl;}

三、试验

我们做项目时可以考虑进行一定的函数封装。代码中printVariableInfo就是对任意的输入类型进行判断。

#include <QCoreApplication>
#include<QString>
#include <iostream>
#include <typeinfo>
#include <string>
using namespace std;
typedef int word;
class A {};
struct bsjsh {int aa;
};
struct bsjsh1 {int aa;
};
void help(int k) {string s1 = "", s2;
}#define varName(x) #x
template <typename T>
void printVariableInfo(const T& variable,string s) { //封装T模版函数std::cout << "Variable type: " << s << std::endl;std::cout << "Variable type: " << typeid(T).name() << std::endl;
}
void myFunction() {std::cout << "Function name: " << __func__ << std::endl;//自带识别__func__
}
int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);//QStringQString name;printf("--------QString-----------\n");printVariableInfo(name, varName(name));//intint myVariable = 42;printf("--------int-----------\n");printVariableInfo(myVariable, varName(myVariable));//class AA c;printf("--------class A-----------\n");printVariableInfo(c, varName(c));//typedef intword d;printf("--------typedef int-----------\n");printVariableInfo(d, varName(d));//doubledouble h;printf("--------double-----------\n");printVariableInfo(h, varName(h));//struct bsjsh1bsjsh1 adffgsgf;printf("--------struct bsjsh1-----------\n");printVariableInfo(adffgsgf, varName(adffgsgf));//函数自带的识别函数__func__myFunction();return a.exec();
}

四、结果

可以看出对于一些类型识别是有对应的关键词进行索引的,但对于一些自定义类型识别的类型前面会有数字,主要是编译器为了识别添加的,因此对于识别的类型还需要一些与场景应用相关的文字处理的方式才可以对其进行筛序。

通过查找QT文档,typeid(T).name()方法返回一个表示类型名称的C字符串。这个字符串取决于编译器和Qt的配置,因此返回的类型列表可能会有所不同。然而,以下是一些常见的类型及其对应的类型名称:

  1. int:返回 "i" 或 "int"。
  2. float:返回 "f" 或 "float"。
  3. double:返回 "d" 或 "double"。
  4. char:返回 "c" 或 "char"。
  5. bool:返回 "b" 或 "bool"。
  6. void:返回 "v" 或 "void"。
  7. 自定义类类型(例如 MyClass):返回类的完全限定名,例如 "MyClass" 或包含命名空间的名称(例如 "MyNamespace::MyClass")。

需要注意的是,这些类型名称可能因编译器和Qt版本的不同而有所差异。有些编译器可能会返回经过修饰的类型名称,包含了额外的信息,如编译器特定的类型信息或模板参数等。

这篇关于C++之获取变量信息名称、类型typeid的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/479398

相关文章

Windows下C++使用SQLitede的操作过程

《Windows下C++使用SQLitede的操作过程》本文介绍了Windows下C++使用SQLite的安装配置、CppSQLite库封装优势、核心功能(如数据库连接、事务管理)、跨平台支持及性能优... 目录Windows下C++使用SQLite1、安装2、代码示例CppSQLite:C++轻松操作SQ

C++中RAII资源获取即初始化

《C++中RAII资源获取即初始化》RAII通过构造/析构自动管理资源生命周期,确保安全释放,本文就来介绍一下C++中的RAII技术及其应用,具有一定的参考价值,感兴趣的可以了解一下... 目录一、核心原理与机制二、标准库中的RAII实现三、自定义RAII类设计原则四、常见应用场景1. 内存管理2. 文件操

C++中零拷贝的多种实现方式

《C++中零拷贝的多种实现方式》本文主要介绍了C++中零拷贝的实现示例,旨在在减少数据在内存中的不必要复制,从而提高程序性能、降低内存使用并减少CPU消耗,零拷贝技术通过多种方式实现,下面就来了解一下... 目录一、C++中零拷贝技术的核心概念二、std::string_view 简介三、std::stri

C++高效内存池实现减少动态分配开销的解决方案

《C++高效内存池实现减少动态分配开销的解决方案》C++动态内存分配存在系统调用开销、碎片化和锁竞争等性能问题,内存池通过预分配、分块管理和缓存复用解决这些问题,下面就来了解一下... 目录一、C++内存分配的性能挑战二、内存池技术的核心原理三、主流内存池实现:TCMalloc与Jemalloc1. TCM

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五

SpringBoot服务获取Pod当前IP的两种方案

《SpringBoot服务获取Pod当前IP的两种方案》在Kubernetes集群中,SpringBoot服务获取Pod当前IP的方案主要有两种,通过环境变量注入或通过Java代码动态获取网络接口IP... 目录方案一:通过 Kubernetes Downward API 注入环境变量原理步骤方案二:通过

一文全面详解Python变量作用域

《一文全面详解Python变量作用域》变量作用域是Python中非常重要的概念,它决定了在哪里可以访问变量,下面我将用通俗易懂的方式,结合代码示例和图表,带你全面了解Python变量作用域,需要的朋友... 目录一、什么是变量作用域?二、python的四种作用域作用域查找顺序图示三、各作用域详解1. 局部作

C++作用域和标识符查找规则详解

《C++作用域和标识符查找规则详解》在C++中,作用域(Scope)和标识符查找(IdentifierLookup)是理解代码行为的重要概念,本文将详细介绍这些规则,并通过实例来说明它们的工作原理,需... 目录作用域标识符查找规则1. 普通查找(Ordinary Lookup)2. 限定查找(Qualif

使用Python实现获取屏幕像素颜色值

《使用Python实现获取屏幕像素颜色值》这篇文章主要为大家详细介绍了如何使用Python实现获取屏幕像素颜色值,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、一个小工具,按住F10键,颜色值会跟着显示。完整代码import tkinter as tkimport pyau

python获取cmd环境变量值的实现代码

《python获取cmd环境变量值的实现代码》:本文主要介绍在Python中获取命令行(cmd)环境变量的值,可以使用标准库中的os模块,需要的朋友可以参考下... 前言全局说明在执行py过程中,总要使用到系统环境变量一、说明1.1 环境:Windows 11 家庭版 24H2 26100.4061