gpt4 book ai didi

c++ - 在模板中使用第一种类型的类成员的类型

转载 作者:行者123 更新时间:2023-12-02 09:55:14 28 4
gpt4 key购买 nike

在我发现this answer的网站上搜索,以获取类内成员的类型。
基于此,我制作了以下示例,该示例可以成功编译。

#include <iostream>
#include <stdio.h>
#include <string>

using namespace std;


class sig_class_t{
public:
int field;
};

class usig_class_t{
public:
unsigned int field;
};

template <class T, class M> M get_member_type(M T:: *);

template<typename my_class = sig_class_t, typename my_type = decltype(get_member_type(&my_class::field))>
class Tricky{
my_type it;
public:
my_type get_it();
void set_it(my_type value);
};

template<typename my_class, typename my_type>
my_type Tricky<my_class,my_type>::get_it(){
return it;
}

template<typename my_class, typename my_type>
void Tricky<my_class,my_type>::set_it(my_type value){
it = value;
}

int main(int argc, char *argv[])
{
return 0;
}

get_member_type如何确定给定指针的类型?
这段代码看起来很复杂,如果我不理解它的工作原理,我将不满意使用它。

最佳答案


template<typename my_class = sig_class_t, 
typename my_type = decltype(get_member_type(&my_class::field))>
class Tricky{
my_type it;
public:
my_type get_it();
void set_it(my_type value);
};

您将 &my_class::field传递给 get_member_type&my_class::field是指向 fieldmyclass成员的指针,因此它具有类型
decltype(my_class::field) myclass::*

或用英语输入一个指向 myclass成员类型的 field成员指针。默认情况下(因为它使用 sig_class_t)是
int sig_class_t::*

为什么将其传递给

template <class T, class M> M get_member_type(M T:: *);

推断 Mint,并将 T推断为 sig_class_t。然后,该函数“返回”一个类型为 M的对象,因此 decltype(get_member_type(&my_class::field))解析为 M(默认情况下为 int),这就是 my_type推论为指针所指向的类型的方式。

关于c++ - 在模板中使用第一种类型的类成员的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60832413/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com