首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以使用模板参数进行矩阵乘法?

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

Stack Overflow用户
提问于 2016-12-06 23:18:00
回答 2查看 125关注 0票数 1

让我按以下方式定义一个矩阵类

代码语言:javascript
复制
template<typename T, size_t rowSize, size_t colSize>
class Matrix
{
 //Class implementation
};

如果我有两个矩阵定义为

代码语言:javascript
复制
Matrix<double,3,2> A;
Matrix<double,2,5> B;
A*B;

可以做乘法吗,如果我尝试,它会说没有参数可以把rhs作为双倍,2,5表示*。是否可以将模板推广到乘'double,x,y‘和'double,y,z’,并返回一个新的矩阵'double,x,y‘

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-06 23:34:46

代码语言:javascript
复制
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;
}

或作为成员:

代码语言:javascript
复制
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
    }

};
票数 5
EN

Stack Overflow用户

发布于 2016-12-06 23:32:31

在类中覆盖*运算符是可能的。但一般情况下

代码语言:javascript
复制
    T& T::operator*(T otherMatrix);
    {
      //do multiplication by hand and return a new Matrix
    }

而不是把double作为唯一的类型。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41006721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档