我有一个 Matrix 类。它是一个带有类型、行和列的模板,用于小矩阵的静态分配。问题在于 operator* 和 operator*= 的重载。在这种情况下,必须为不同的对象授予操作:相同类型,行等于我的列和一些列。我现在写了这段代码并且它可以工作,但我想知道我是否可以强制使用相同的类型 T 而不是使用另一种类型 T1。行和列也是一样。
template<typename T, int R, int C>
class Matrix {
private:
//some data.....
public:
//some methods.....
template <typename T1, int R1, int C1> <----here I'd like to use T as type
Matrix<T,R,C1> operator*(const Matrix<T,R1,C1>& rhs);
template <typename T1, int R1, int C1>
Matrix<T,R,C1>& operator*=(const Matrix<T,R1,C1>& rhs);
}
最佳答案
对于operator *
,模板参数不必与函数参数相匹配,因此您可以将其省略。此外,第二个矩阵的行数与第一个矩阵的列数相匹配有一个限制,因此您实际上只需要一个模板参数:
template<typename T, int R, int C>
class Matrix {
private:
//some data.....
public:
//some methods.....
template <int C1>
Matrix<T,R,C1> operator*(const Matrix<T,C,C1>& rhs) const;
};
operator *=
只能用于方阵,所以你必须小心。
关于c++ - 模板参数作为其他模板的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25364147/