gpt4 book ai didi

c++ - 模板参数变量/动态实例化

转载 作者:行者123 更新时间:2023-11-30 04:11:44 24 4
gpt4 key购买 nike

我是 C++ 的初学者,非常感谢您的帮助!

我目前正在使用数据类型、维度宽度和维度高度的模板参数实现矩阵类。

template <class T, int rows, int columns> class Matrix

在乘法函数中,我必须创建结果矩阵(高度矩阵 A x 宽度矩阵 B),但我收到错误消息“模板值不能出现在常量表达式中”。

// overload * for matrix multiplication 
template <class T, int rows, int columns>
Matrix<T, rows, columns> operator*(Matrix<T, rows, columns> a, Matrix<T, rows, columns> b) {
Matrix <T, rows, columns> result = new Matrix<T, a->height, b->width>;
// make multiplication here

关于如何使用给定类型和 A 的高度制作新矩阵的任何想法。 B的宽度?

非常感谢!

最佳答案

如错误所述,您不能根据动态(运行时)值设置静态(编译时)“字段”。

您可以(不是说您应该)对两个矩阵的大小使用不同的模板参数,并用它们创建一个新矩阵:

template <class T, int rows_A, int columns_A, int rows_B, int columns_B>
Matrix<T, rows_A, columns_B> operator*(Matrix<T, rows_A, columns_A> a, Matrix<T, rows_B, columns_B> b) {
Matrix <T, rows_A, columns_B> result;
// ...
return result;
}

正如 Joe Z. 所说,您还必须先检查操作的有效性。因为 columns_A 必须等于 rows_B,所以您可以分解这两个模板参数。

编辑:mmmmmmmm 在下面的评论中写下了这个因式分解:

template <class T, int rows_A, int columns_A_rows_B, int columns_B>
Matrix<T, rows_A, columns_B> operator*(
Matrix<T, rows_A, columns_A_rows_B> a,
Matrix<T, columns_A_rows_B, columns_B> b
) {
Matrix <T, rows_A, columns_B> result;
// ...
return result;
}

然而,这段代码并不好看,也不易于使用。如果可以,您可以按照 Matt 的建议尝试使尺寸动态化(而不是参数模板)。

关于c++ - 模板参数变量/动态实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20122856/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com