模板类和Friend模板函数
Template class and Friend template function
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>
的私有成员,反之亦然。
相关文章:
- 如何调用用于重载运算符"<<"的 friend 函数?
- 在使用另一个类"friend"函数时无法发现错误C++
- C++ 如何将关键字"friend"与两个类的成员函数一起使用 相互包含
- 模板类和Friend模板函数
- 在运算符重载中使用带有 const 引用的 friend 函数
- 运算符重载(使用binaray friend函数)类没有成员,并且成员不可访问
- 类的 friend 函数无法访问其私有向量;
- friend get 函数,返回通过可变参数模板递归计算的类型
- 如何在 c++ 中使用常见的 Friend 函数
- 在Ostream Overload Friend函数中使用向量
- friend函数是如何在内部实现的
- Friend函数和未定义的私有方法
- c++ 派生基类 Friend 函数访问父级上的私有函数
- 前向声明的问题-Friend函数和行/点类
- 为什么friend函数不能访问类的私有成员
- 使用friend函数,我们可以覆盖类的私有成员吗
- Friend函数访问静态库中定义的类的私有成员
- 实现Friend函数
- Friend函数和命名空间.无法访问类中的私有成员
- 声明受保护的函数friend