c++ - 模板参数作为其他模板的参数

标签 c++ templates

我有一个 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/

相关文章:

c++ - 如果我删除其他进程的共享内存会怎样?

C++ 模板整数类型足够的无符号类型

c++ - 第一次运行循环时如何忽略代码的特定部分?

c++ - 不同类型的类成员,每个枚举变体一个

c++ - 跨动态链接库的模板静态类

c++ - 轮廓的排序点

c++ - 为什么我得到cc1plus : error: unrecognized command line option "-arch"?

templates - 使用 Jenkins 根据构建参数生成文件

visual-studio-2010 - 在 VC10 上将 lambda 传递给模板函数

c++ - 模板函数指针参数与构造函数参数