模板类友谊

Ale*_*raC 9 c++ access-control friend

我最近遇到了一段c ++代码,其中一个类与自己成为朋友.正如我在不同论坛上所读到的,一个班级已经是他自己的朋友.所以我想知道是否有一个特定的原因,为什么人们想要明确地让自己成为一个阶级朋友.

另一个问题是,让一个班级成为自己的朋友的原因是什么?

也许有经验的人可以澄清这个话题.

这是代码示例,用于说明我的问题:

template < typename T>
class Foo: public T
{
protected:
   template < typename U>
   friend class Foo;
}
Run Code Online (Sandbox Code Playgroud)

ras*_*ash 19

确实让一个类成为自己的朋友是没有意义的,除非它是一个模板类.例如,以下代码是有意义的:

template <class T>
class A
{
    template<class U>
    friend class A;
}
Run Code Online (Sandbox Code Playgroud)

一个STL的例子是std::_Ptr_base这对基类std::shared_ptrstd::weak_ptr.

  • `std :: _ Ptr_base`是一个实现细节,不是标准的一部分.这三者中没有一个与STL有任何关系. (2认同)
  • @rashmatash,您可以阅读[this](http://stackoverflow.com/questions/5205491/whats-this-stl-vs-c-standard-library-fight-all-about) (2认同)

Cas*_*Cow 5

它并不是使该类成为其自身的朋友,而是使该模板的所有类成为所有其他类的朋友。不同阶级的A<Foo>朋友也是如此。A<Bar>

我很惊讶语法是你打印出来的,而不是打印出来的,template<typename U> friend class A<U>;但这就是它的实际含义。