c++ - 相同模板类但不同模板类型的 protected 成员

标签 c++ templates protected

我有一个 Matrix2d模板类和每个 Matrix2d对象是 std::vector在引擎盖下。我经常访问std::vector直接在速度和简单的方法中。当我试图重载 operator == 时遇到了一个问题使其进行逐个元素的比较并使其返回 Matrix2d<bool> .

template <class T>
class Matrix2d {
protected:
   std::vector<T> vec;

public:
    Matrix2d<bool> operator==(const Matrix2d<T>& rhs) const
    {
        Matrix2d<bool> mat(numRows, numCols);

        for (unsigned index=0; index<vec.size(); index++) {
            mat.vec[index] = vec[index] == rhs.vec[index];
        }
        return mat;
    }
};

问题是 Matrix2d<T>对象无法访问 Matrix2d<bool> 的 protected 成员.显然不同的模板类型使编译器认为它是一个不同的类,因此它不能访问 protected 成员。有没有允许Matrix2d<T> 的干净方法?访问 Matrix2d<bool> 的 protected 成员的对象对象?

附言显然,我没有包含足够的代码来使其可编译,我只是试图包含关键元素。如果有人想要可编译的代码,请告诉我。

最佳答案

确实,matrix2d<bool>matrix2d<int>是不相关的类型,即使它们来自同一个模板。

要允许彼此访问私有(private)成员,您可以添加:template <typename U> friend class Matrix2d; .

您可能只为 matrix2d<bool> 这样做,但我怀疑它会产生太多重复。

template <class T>
class Matrix2d {
protected:
   std::vector<T> vec;
   std::size_t numRows;
   std::size_t numCols;
public:
    template <typename U> friend class Matrix2d;

    Matrix2d(std::size_t numRows, std::size_t numCols);

    Matrix2d<bool> operator==(const Matrix2d<T>& rhs) const
    {
        Matrix2d<bool> mat(numRows, numCols);

        for (unsigned index=0; index<vec.size(); index++) {
            mat.vec[index] = vec[index] == rhs.vec[index];
        }
        return mat;
    }
};

关于c++ - 相同模板类但不同模板类型的 protected 成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59430903/

相关文章:

c++ - 如何将模板实例化声明为类的友元?

c++ - 在 C++ 中输入 áã 和字符串得到 AN£A$ 如何处理?

c++ - 返回枚举的基础类型和整数的整数的元编程构造

c++ - Cmake 不适用于 Maverick 上的 openMP

c++ - 初始化模板类的静态成员

C++ 类(公共(public)、私有(private)和 protected )

java - 在不使用 protected 的情况下处理抽象类的正确方法是什么?

security - 变量隐私实际上与安全性有什么关系,还是只是为了编程方便?

c++ - sizeof() 一个 vector

c++ - 多线程 - 线程是否同时开始运行?