模板类和Friend模板函数

Template class and Friend template function

本文关键字:函数 Friend      更新时间:2023-10-16

C++初级读本:模板和函数

template <typename>
class BlobPtr;
template <typename>
class Blob;
template <typename T>
bool operator==(const Blob<T>&, const Blob<T>&);
template <typename T>
class Blob
{
friend class BlobPtr<T>;
friend bool operator==<T>(const Blob<T>&, const Blob<T>&);
};

然后:

Blob<char> ca;
Blob<int> ia;

BlobPtr<char>的成员可以访问ca的非公开部分(或任何其他Blob对象(,但ca对ia(或任何其他Blob(或Blob的任何其他实例化。

问题:我想测试一下代码。如何使用ca访问ia的非公开部分?为了澄清,我知道这是不可能的,但我想测试代码以查看错误。

您可以在使用friend之前添加template

template<typename T>
class Blob
{
template<typename T1>
friend class Blob;
public:
template<typename T1>
bool operator==(const Blob<T1>& other)
{
return i == other.i;
}
private:
T i;
};
Blob<int> i;
Blob<char> j;
int main()
{
i == j;
}

添加模板使每个Blob<T>类成为彼此的朋友类。因此,Blob<int>的每个成员函数都可以访问Blob<char>的私有成员,反之亦然。