繁体   English   中英

类模板的友元声明

[英]Friend declaration of class template

我遇到了朋友类模板的问题。 这是我的代码的样子

template<typename T>
class A{
private:

  template<typename U>
  friend class A;

  int m_num = 0;

public:
//...

};

尽管

template <typename T>
class B{
private:

  template<typename U>
  friend class B;

  template<typename U>
  friend class A; // Set A as friend class template of B

public:

  template<typename U>
  int GetNumOfA(const A<U>& a){
    return a.m_num; // Cannot Access A's private member!
  }

};

我希望 A 的私有成员可以访问,因为我将 A 声明为 B 的朋友类。但它无法访问它。 你能帮我弄清楚为什么会这样吗? 或者有什么想法可以让 B 访问m_num

你的方法不对。 您希望B成为A朋友。 所以你需要在A的定义中声明B为朋友:

template<typename T>
class A{

//...

  template<typename U>
  friend class B;

//...

};

但是,请考虑一下您是否真的希望所有这些类及其不同的专业化成为friend 将成员设为private的重点在于它代表类内部的状态,不应由无关代码直接访问。 通常,如果您需要直接访问成员,那么您应该将其设为public或者如果存在不允许这样做的类不变量,请通过保留不变量的public成员函数来访问它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM