c++ - 模板类友元

标签 c++ friend access-control

我最近发现了一段 C++ 代码,其中一个类与自身成为友元。正如我在不同论坛上读到的那样,一个类(class)已经是自己的 friend 。所以我想知道是否有一个特定的原因可以明确地让一个类(class)成为自己的 friend 。

另一个问题是,为什么要让一个类成为它自己的 friend ?

也许有很多经验的人可以澄清这个话题。

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

template < typename T>
class Foo: public T
{
protected:
   template < typename U>
   friend class Foo;
}

最佳答案

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

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

std::_Ptr_base 是一个 STL 示例,它是 std::shared_ptrstd::weak_ptr 的基类。

关于c++ - 模板类友元,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25182550/

相关文章:

c++ - c++ primer 是否对 `dynamic_cast` 的使用有问题?

python - 如何允许通过 Web Controller Python 脚本导入其他受限模块? Plone 4

c++ - 将参数传递给 std::thread 包装器

c++ - HashMap 直接访问运算符 []

c++ - g++ 错误 : specialization after instantiation (template class as friend)

2行之间的PHP friend 关系?

c++ - _mkdir给出错误的错误窗口

c++ - 计算出保存一个 int 需要多少字节的算法

c++ - 为模板类重载友元运算符<<

Objective-C 相当于 Swift 中的 internal(set)