是否可以使用模板参数进行矩阵乘法
Is the matrix multiplication possible with template arguments
让我定义一个矩阵类如下
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
作为类型。
相关文章:
- 为什么 std::绑定错误参数可以成功?
- 是否可以在C++中有一个"generic"模板参数,该参数可以是非类型模板参数或类型?
- 是否可以使C++类成为Objc类的委托
- 是否可以使一个类成为两个不同层次结构的子类?
- 非类型引用参数可以在运行时修改,这是否意味着模板可以在运行时实例化?
- 根据模板参数可以选择静态的类成员
- C :宏参数可以在其中有空间吗?
- 为什么右值引用类型的模板参数可以绑定到左值类型?
- 是否有编译器标志可以使较新的 gcc 版本像旧版本一样构建
- C 可以使destuructor不称为班级成员和基类攻击方的灾难
- 转换构造函数的参数可以隐式转换吗?
- 函数参数可以是char*、long或int.可能吗
- 可以使未命名的结构静态
- 非类型模板参数可以是 "void*" 类型吗?
- 是否可以使整数仅收到一个单个数字而不是两个接收输入
- 为什么参数可以在对象初始化时通过赋值运算符传递给构造函数?
- C++:有哪些常规方法可以使代码更有效地用于大数字
- 是否可以使 std 容器使用默认运算符为新?
- 是否可以使函数接受给定参数的多种数据类型
- 是否可以使函数对于常量参数或变量参数的行为不同