首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何从成员指针模板类型获取类类型

从成员指针模板类型获取类类型可以通过使用C++的类型推导和模板元编程技术来实现。以下是一个示例代码:

代码语言:txt
复制
#include <iostream>

template<typename T, typename U>
struct MemberPointerToClass {
    using ClassType = T;
};

class MyClass {
public:
    int myMember;
};

int main() {
    using MemberPointerType = int MyClass::*;
    using ClassType = typename MemberPointerToClass<MemberPointerType, MyClass>::ClassType;

    std::cout << typeid(ClassType).name() << std::endl;

    return 0;
}

在上述代码中,我们定义了一个模板结构MemberPointerToClass,它接受两个模板参数:成员指针类型T和类类型U。通过在模板结构中定义一个别名ClassType,我们可以从成员指针类型中提取出类类型。

main函数中,我们使用int MyClass::*作为成员指针类型,并通过MemberPointerToClass模板结构获取类类型MyClass。最后,我们使用typeid运算符打印出类类型的名称。

这种方法可以用于从任何成员指针模板类型中提取类类型。它在模板元编程中非常有用,可以在编译时进行类型推导和转换。

腾讯云相关产品和产品介绍链接地址:

请注意,以上链接仅供参考,具体产品选择应根据实际需求和腾讯云官方文档为准。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【C++】泛型编程 ⑮ ( 模板示例 - 数组模板 | 自定义中持有指针成员变量 )

一、支持 数组模板 存储的 自定义 1、可拷贝和可打印的自定义 在上一篇博客 中 , 定义了 可拷贝 与 可打印 的 自定义 Student , 可以被存放到 数组模板 中 ; 由于其 成员变量...中是 char* 类型指针的情况 , 这里涉及到了 堆内存分配 以及 深拷贝 问题 ; 如果将上述 Student 中的 char m_name[32] 数组成员 , 改为 char* m_name...m_length; // 指向数组数据内存 的指针 // 指针类型 是 泛型类型 T T* m_space; }; 2、Array.cpp 代码文件 #include "Array.h" /...// 返回引用就是返回本身 // 将 this 指针解引用, 即可获取数组本身 return *this; } 3、Test.cpp 主函数代码文件 #define _CRT_SECURE_NO_WARNINGS...#include "iostream" using namespace std; // 此处注意, 模板 声明与实现 分开编写 // 由于有 二次编译 导致 导入 .h 头文件 模板函数声明

13510

C语言边角料:结构体中指针类型成员变量,它的类型重要吗?

本着强迫症要消灭一切警告的做法,最终定位到:是结构体内部, 指向结构体类型指针成员变量导致的问题。 这个问题,也许永远不会碰到,之所以被我赶上了,应该是因为某个时候手贱, 误碰了键盘导致。...正常的代码 比较简单:结构体 struct _Data2_ 的第 2 个成员变量是一个指针,指向的数据类型是结构体 struct _Data1_。...三、把类型改为 void 指针类型 把 struct _Data2_ 中的 next 成员,改为 指向 void 型的指针,然后在 main 函数中操作它。...这又回到了指针的本质: 指针就是一个地址,至于如何来解释这个地址中的内容,这是由定义这个指针时所指定的数据类型来决定的 结合代码来看:虽然d2.next是一个 void 型指针,但是它的确存储了一个 地址...然后把这个地址赋值给dn 指针,那么通过dn指针来操作该地址内的成员时,就取决于在定义dn时所指定的数据类型(Data1),因此 dn->a 就可以正确的从这个地址中取出前 4 个字节,然后作为一个int

50540

面向对象之this指针中的枚举类型

this指针中的枚举类型 1.this指针 相信在坐的很多人,都在学Python,对于Python来说有self,类比到C++中就是this指针,那么下面一起来深入分析this指针中的使用!...其次,this指针的使用: (1)在的非静态成员函数中返回对象本身的时候,直接使用 return *this。 (2)当参数与成员变量名相同时,如this->n = n (不能写成n = n)。...然后初始化构造函数,并获取这个人的年龄,设置后,再获取!...在C++中和结构是只有一个区别的:成员默认是private,而结构是public。this是指针,如果换成结构,那this就是结构的指针了。...2.中的枚举类型 有时我们希望某些常量只在中有效。由于#define 定义的宏常量是全局的,不能达到目的,于是想到实用const 修饰数据成员来实现。

1.1K10

初识指针指针指针变量、如何理解地址、指针类型的意义、void*指针、野指针、空指针)(笔记)

2.32位平台下地址是32个bit,指针变量的大小是4个字节 64位平台下地址是64个bit,指针变量的大小是8个字节 三、如何理解地址: 计算机中硬件单元要互相协同工作(协同:互相进行数据传递...四、指针类型的意义(为什么不用ptr_t p代表所有指针) 1.指针解引用的时候有多大权限 (如果一个指针代替所有的话,解引用时的字节与变量定义类型不同) 2.指针类型决定了指针向前或向后走一步有多大...:无具体指针(泛型指针) 这种类型指针可以用来接受任意类型的地址,但也有局限性, void*类型指针,局限性在于他不能直接进行指针的+-整数和解引用的运算 有什么用: 一般void*类型指针是使用在函数参数的部分...,用来接收不同数据类型的地址, 这样可以实现泛型编程的效果,使得一个函数来处理多种类型的数据 注意: void*类型指针不能直接进行解引用的操作 void* 类型指针也不能进行指针计算的操作...) { int* p = test(); printf("hehe\n");//为什么这里加了一个代码,这里的值就变了 printf("%d\n", *p);// return 0; } 如何规避野指针

7610

【C++】异常+智能指针+特殊类型转换

C++98率先提出来的一个智能指针就是auto_ptr,这个指针解决拷贝的方案非常的荒唐,荒唐至极,以至于C++98发行出来到现在被骂了好多年,所以很多的公司已经明令禁止不允许使用auto_ptr。...unique_ptr是如何解决智能指针的拷贝问题呢?他的实现策略也非常的简单,直接禁止拷贝。这也是为什么叫做unique的原因,因为唯一嘛!也就是不允许拷贝。 2....delete,表示该成员函数被禁掉,编译器会删除这样的成员函数,此时无论内还是外都无法调用到已经被删除的成员函数。...,通过这个指针来调用成员方法。...,也可以将指针类型转换为整数类型,比如将void*类型指针转换为一个实际类型指针,或者将一个派生指针转换为基指针

29040

类型即正义:TypeScript 入门到实践(三):类型别名和

本文由图雀社区成员 pftom 写作而成,点击阅读原文查看图雀社区主站链接,感谢作者的优质输出,让我们的技术世界变得更加美好学习了注解函数,又了解了类型运算如联合类型和交叉类型,接下来我们来了解一些 TS...中独有的类型别名,它类似 JS 变量,是类型变量,接着我们还会学习 TS 中内容非常庞杂的内容之一:,了解 TS 中的独有特性,以及如何注解,甚至用去注解其他内容。...我们来看一个简单的类型别名的例子,假如我们有一个获取一个人姓名的函数,它接收一个参数,这个参数有可能直接是要获取的姓名,它是一个 string 类型,也有可能是一个另外一个函数,需要调用它以获取姓名,它是一个函数类型...那么有的同学看到这里就有疑问了,我们的 Animal 类型是用来注解的实例的,那么的构造函数 Animal 该如何注解了?...:TypeScript 入门到实践(序章)● 类型即正义:TypeScript 入门到实践(一)● 类型即正义:TypeScript 入门到实践(二):函数、交叉/联合类型类型守卫 ·END·

2.8K30

如何通俗理解类型的差别?

如何通俗理解类型的差别? —— 新手编程1001问之C#编程基础 ---- 我们日常编程经常遇到类型的概念,有时不免会对这两个东西产生纠结,它们究竟是同一种东西呢?还是有什么差别?...比如,一个数字3它是整数类型,或者一个字符“a”它是char字符类型外观上我们就能很好的理解它就是一个值类型的数据。 引用类型呢?...比如,我们知道字符串类型的数据是引用类型的,那么,如果有一个字符串: string x = “abc”; 我们的程序是如何拿到x中的“abc”的呢?...系统运行时会为其分配两个空间,一个在堆上用于存放数据本身的值,另一个在栈上用于存放一个读取堆中数据的引用(实际上也是一个内存地址,或者叫指针)。...C#中,微软官方是这样定义的: 是最基本的 C# 类型是一种数据结构,可在一个单元中就将状态(字段)和操作(方法和其他函数成员)结合起来。为动态创建的实例(亦称为“对象”)提供了定义。

1.7K30

【C++】泛型编程 ⑧ ( 模板继承语法 | 普通 继承 模板语法 | 模板 继承 模板语法 | 继承模板必须指定具体的类型参数列表 | 继承 模板 必须重写构造函数 )

一、普通 继承 模板语法 1、普通 继承 模板语法 模板 作为父 , 子类 继承 模板 , 需要 指定 具体的类型参数列表 ; 需要 重写 构造函数 , 其中必须调用 模板 具体...的 子类 : // 模板 继承时 , 需要具体化 模板 // 也就是 指定 模板类型参数列表 , 将 泛型类型 固定下来 // C++ 编译器 只有知道了具体类型 , 才能知道 父占用内存大小..., 模板子类 与 普通子类 区别就是 , 模板子类 需要在尖括号中指定 具体的 类型参数列表 的 数据类型 ; 此时 , 在继承时 , 被继承的 模板 必须 声明 类型参数列表 , 将具体的泛型类型写在尖括号中...二、模板 继承 模板语法 1、模板 继承 模板语法 普通 继承 模板时 , 需要指定 模板 的具体 参数类型 , 下面代码中的 具体类型就是 int ; class Son : public...Father 模板 继承 模板 时 , 也需要 指定 父模板 的具体 泛型类型 , 只是这个泛型类型可以是 另外一个泛型 T ; 下面的代码 是 模板 继承 模板的 代码 , Son2

42830

如何通过Java反射获取泛型类型信息

泛型的使用场景 在讨论如何用反射获取泛型类型之前,我们先来回顾下,在Java里面什么时候会使用泛型,了解这个问题之后,我们才能继续思考如何用反射获取泛型类型。... {//......} (2)在里面使用一个泛型 比如在Java的LinkedList的源码中,有两个成员变量定义如下,分别代表链表的头和尾: transient Node first...但类似第二种场景中通过对象的指针引用,我们是可以通过反射获取其泛型的类型信息的,但要注意局部变量是没法获取其泛型信息的。...不能通过发射获取泛型类型信息的场景有二个,分别是: (1)或接口声明的泛型信息 (2)局部变量的泛型信息 获取方法返回值的泛型类型 如下面定义的一个测试: public class MyClass...:"+realType); } } } } 总结 本文主要介绍了如何使用反射来获取部分泛型参数的类型信息,并介绍了那些场景不能使用反射获取类型信息

8.9K21
领券