范本类别和Friend范本功能

时间:2018-07-09 23:36:39

标签: c++ templates

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 的非公开部分?需要澄清的是,我知道这是不可能的,但是我想测试代码以查看错误。

1 个答案:

答案 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>的私有成员,反之亦然。