我最近遇到了一段c ++代码,其中一个类与自己成为朋友。正如我在不同论坛上所读到的,一个班级已经是他自己的朋友。所以我想知道是否有一个特定的原因,为什么人们想要明确地让自己成为一个阶级朋友。
另一个问题是,让一个班级成为自己的朋友的原因是什么?
也许有经验的人可以澄清这个话题。
以下是代码示例,用于说明我的问题:
template < typename T>
class Foo: public T
{
protected:
template < typename U>
friend class Foo;
}
答案 0 :(得分:19)
确实让一个类成为自己的朋友是没有意义的,除非它是一个模板类。例如,以下代码是有道理的:
template <class T>
class A
{
template<class U>
friend class A;
}
STL示例是std::_Ptr_base
,它是std::shared_ptr
和std::weak_ptr
的基类。
答案 1 :(得分:4)
这不是让班级成为自己的朋友,而是使该模板的所有班级成为所有其他班级的朋友。因此A<Foo>
是A<Bar>
的朋友,这是一个不同的类。
我很惊讶语法是在你打印时而不是template<typename U> friend class A<U>;
,但这实际上意味着它。
答案 2 :(得分:-1)
完全没有理由。 C ++标准并不会使它成为非法,但是使自己的类朋友不会改变任何东西,因为该类已经完全访问它自己。