让我按以下方式定义一个矩阵类
template<typename T, size_t rowSize, size_t colSize>
class Matrix
{
//Class implementation
};如果我有两个矩阵定义为
Matrix<double,3,2> A;
Matrix<double,2,5> B;
A*B;可以做乘法吗,如果我尝试,它会说没有参数可以把rhs作为双倍,2,5表示*。是否可以将模板推广到乘'double,x,y‘和'double,y,z’,并返回一个新的矩阵'double,x,y‘
发布于 2016-12-06 23:34:46
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
}
};发布于 2016-12-06 23:32:31
在类中覆盖*运算符是可能的。但一般情况下
T& T::operator*(T otherMatrix);
{
//do multiplication by hand and return a new Matrix
}而不是把double作为唯一的类型。
https://stackoverflow.com/questions/41006721
复制相似问题