VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 701|回复: 3

还是模版问题!!!

[复制链接]

3

主题

10

帖子

10.00

积分

新手上路

Rank: 1

积分
10.00
发表于 2020-1-22 10:00:02 | 显示全部楼层 |阅读模式
c++ primer 4th p553

template<class T> class A;

template<class T> class B
{
   friend class A<T>;
   friend class E<T>;
};

如果没有告诉编译器该友元是一个模版,则编译器认为该友元是一个普通非模版类或非模版函数。

我想问的是,编译器如何把E当成一个普通非模板类呢?
回复

使用道具 举报

0

主题

23

帖子

13.00

积分

新手上路

Rank: 1

积分
13.00
发表于 2020-2-1 11:00:01 | 显示全部楼层
如果你这么写:
template<class T> class B
{
friend class A;
};

那么编译器认为有一个普通类叫做A,如果你没有定义这样的类,那你就该碰到编译错误了
你定义了A<T>也没有用
回复

使用道具 举报

0

主题

24

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
发表于 2020-2-1 23:00:02 | 显示全部楼层
你此处写的是friend class E<T>;,这就说明E一定是一个模版类,而且E与A的友元关系是绑定的(bound),即每个T所对应的E和A是友元关系,不同的T对应的E和A不是友元关系。

PS:有关friend和template的地方,是比较麻烦的地方,有一些语法在各个编译器之间有不同的解释,而且好像差的还很多,所以不要太过认真,否则就专牛角尖儿了。
回复

使用道具 举报

0

主题

55

帖子

44.00

积分

新手上路

Rank: 1

积分
44.00
发表于 2020-2-16 10:30:01 | 显示全部楼层
可搜索herb sutter的“Befriending Templates”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表