类模板的好友声明

Friend declaration of class template

本文关键字:好友 声明      更新时间:2023-10-16

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

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 的好友类。但它无法访问它。 你能帮我弄清楚为什么会这样吗?或者有什么想法可以让m_num从 B 访问?

你用错了方式。你想B成为A的朋友。所以你需要在A的定义中声明B朋友:

template<typename T>
class A{
//...
template<typename U>
friend class B;
//...
};

但是,请考虑您是否真的希望所有这些课程及其不同的专业都friend。使成员private的要点是,它表示类的内部状态,不应由不相关的代码直接访问。通常,如果您需要直接访问某个成员,则应将其设为public,或者如果存在不允许这样做的类不变量,则通过保留不变量的public成员函数提供对它的访问。