c++ - 模板参数是否可以进行矩阵乘法

标签 c++ templates

让我定义一个矩阵类如下

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 for *。是否可以将模板概括为将 'double,x,y' 和 '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;
}

或作为成员(member):

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
    }

};

关于c++ - 模板参数是否可以进行矩阵乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41006721/

相关文章:

c++ - '{' token 错误之前的预期类名

c++ - 更改任意数字类型值的范围刻度

java - 获取模板参数的类数据类型?

c++ - 派生类无法正确查看父类

c++ - 在 Windows 上使用 curlpp。如何开始

类型为 "long"的 C++ 计算

c++ - 显示枚举类型

c++ - 如何删除文件中的数据存储?

c++ - 指向任意类方法的模板非类型指针

c++ - 当类是另一个模板的模板参数时,可以使用类模板参数推导吗?