C++:模板可以成为类的朋友吗?

C++: Can a Template be friend of a Class?

提问人:Ali Rojas 提问时间:8/5/2020 最后编辑:Ali Rojas 更新时间:8/5/2020 访问量:154

问:

是否有可能结交一个类的朋友,一个类模板的所有可能变体?

只是为了澄清一下,例如,像这样的东西:

class A
{ friend template B; }    // syntactic error yeah

因此,任何变体都可以操作 的任何受保护属性。B<X>A

A是一个小而简单的职业,有很多朋友操纵它的属性。然后只需要一个模板。我知道我可以这样做:

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

但是,我将不得不更改所有其他朋友的代码,并且我想避免它。

C++ 模板 friend-class

评论

2赞 cigien 8/5/2020
B是什么样的模板?你能举出一些用法的例子吗?
3赞 cigien 8/5/2020
“A 是一个小而简单的类,有很多朋友操纵它的属性”。也许它的所有成员都应该公开?
0赞 Ali Rojas 8/5/2020
@cigien:所有的朋友都是众所周知的可控类,所以在他们里面A的属性是安全的。但是我不知道使用我的整个系统的其他应用程序。

答:

5赞 Dmitry Kuzminov 8/5/2020 #1

您可以像这样定义一个朋友模板类:

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

这将使朋友的每一个专业化。我有一个类似的问题,其目标相反:限制某些专业化: 与参数匹配的友元模板函数实例化class Bclass A