类模板的成员属性类型也是类模板怎么办?

今天遇到个有趣的东西,具体代码如下

#include <iostream>
using namespace std;
template<class T>
class A 
{

    public:
    T a;
};

template<class U>
class B 
{
    public:
    typename U::A b1;  //类模板的成员属性类型也是类模板
};

class C
{
    public:
    typedef int A;
};

如你所见,第15行代码就是这么奇葩,不过更奇葩的还在后面。

请问你要怎么创建一个B类型对象呢?

这就涉及到一些问题了。

第15行代码 typename U::A b1; 在这里,B的成员属性b1是一个什么类型?

在这里 U::A 表示了U本身是一个A类型或者含有A类型 的类型

所以想要给B创建对象并赋值就有了下面的代码

int main() 
{
    B<A<int>> b;
    b.b1.a = 123;

    B<C> bc;
    bc.b1=123;

   
}

上面的A<int>是A类型,

而 C中的 typedef int A;

这个语句定义了一个名为A的类型别名(typedef),它在C类中作为公共成员属性。因此,在C类外部可以使用“C::A”来引用这个类型别名,并且它等同于int类型。

bye!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值