是否可以使用模板参数进行矩阵乘法

Is the matrix multiplication possible with template arguments

本文关键字:参数 可以使 是否      更新时间:2023-10-16

让我定义一个矩阵类如下

template<typename T, size_t rowSize, size_t colSize>
class Matrix
{
 //Class implementation
};

现在,如果我有2个矩阵定义为

Matrix<double,3,2> A;
Matrix<double,2,5> B;
A*B;

可以完成乘法,如果我尝试的话,不会说没有参数可以将RHS视为double,2,5。是否可以将模板概括为" double,x,y"answers" double,y,z",然后返回一个新矩阵'double,x,y'

template<typename T, size_t rowSize, size_t colSize>
class Matrix
{
    // Implementation
};
template<
    typename T,
    typename U,
    size_t rowSize1,
    size_t commonSize,
    size_t colSize2
>
auto operator * (Matrix<T, rowSize1,commonSize> const & a,
                 Matrix<U, commonSize,colSize2> const & b)
  -> Matrix<decltype(std::declval<T>()*std::declval<U>()), rowSize1, colSize2>
{
    // Implementation
}
int main()
{
    Matrix<double,3,2> A;
    Matrix<double,2,5> B;
    auto C = A*B;
}

或成员:

template<typename T, size_t rowSize, size_t colSize>
class Matrix
{
public:
    template<typename U, size_t colSize2>
    auto operator * (Matrix<U, colSize,colSize2> const & b)
      -> Matrix<decltype(std::declval<T>()*std::declval<U>()), rowSize, colSize2>
    {
        // Implementation
    }
};

可能会覆盖类中的*操作员。但这通常是

    T& T::operator*(T otherMatrix);
    {
      //do multiplication by hand and return a new Matrix
    }

,不仅不将double作为类型。