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 的非公开部分?需要澄清的是,我知道这是不可能的,但是我想测试代码以查看错误。
答案 0 :(得分:1)
您可以在使用template
之前先添加friend
。
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>
的私有成员,反之亦然。