我有一个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>
的受保护成员。显然,不同的模板类型使编译器将其视为不同的类,因此它无法访问受保护的成员。是否有一种干净的方法允许Matrix2d<T>
对象访问Matrix2d<bool>
对象的受保护成员?
P.S。显然,我没有包含足够的代码来使其可编译,我只是在尝试包含关键要素。如果有人想要可编译的代码,请告诉我。
我有一个Matrix2d模板类,每个Matrix2d对象在引擎盖下都是一个std :: vector。我经常直接在方法中访问std :: vector以便提高速度和简化操作。我遇到了一个问题...
您可以这样创建专门化:
的确,matrix2d<bool>
和matrix2d<int>
是不相关的类型,即使它们来自同一模板。