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_ptr和std::weak_ptr.
它并不是使该类成为其自身的朋友,而是使该模板的所有类成为所有其他类的朋友。不同阶级的A<Foo>朋友也是如此。A<Bar>
我很惊讶语法是你打印出来的,而不是打印出来的,template<typename U> friend class A<U>;但这就是它的实际含义。