c++ - 模板类实例化的权限问题

【字号: 日期:2023-04-14浏览:28作者:雯心

问题描述

同一个模板类进行实例化时,参数不同,两个实例化的类无法互相访问私有成员,这个怎么解决?比如我现在实现一个矩阵的类:

template <typename T, int ROWS, int COLS>class Matrix{ T a_[ROWS][COLS];public: template <int MCOLS> Matrix<T, ROWS, MCOLS> operator*(const Matrix<T, COLS, MCOLS>& m) {Matrix<T, ROWS, MCOLS> result;for (int i = 0; i < MCOLS; i++){ for (int j = 0; j < COLS; j++){T s = T();for (int k = 0; k < COLS; k++){ s += a_[i][k] * m.a_[k][j];//无法访问 private 成员}result.a_[i][j] = s; }}return result; }};int main(){ Matrix<float, 3, 4> m1; Matrix<float, 4, 3> m2; Matrix<float, 3, 3> m3 = m1 * m2; return 0;}

编译器会报错:error C2248: “Matrix<float,4,3>::a_”: 无法访问 private 成员(在“Matrix<float,4,3>”类中声明)

请问如何解决这个问题?

各位,我已经自己找到解决方法了,可以在类中声明自己的模板类为友元函数,如:

template <typename T, int ROWS, int COLS>class Matrix{ T a_[ROWS][COLS]; template <typename,int,int> friend class Matrix;public: ...};

问题解答

回答1:

各位,我已经自己找到解决方法了,可以在类中声明自己的模板类为友元函数,如:

template <typename T, int ROWS, int COLS>class Matrix{ T a_[ROWS][COLS]; template <typename,int,int> friend class Matrix;public: ...};

相关文章: