如何在C++中正确返回模板对象

How to make proper return of templated object in C++?

本文关键字:返回 对象 C++      更新时间:2023-10-16

在此代码中,create_matrix返回Matrix<int, 2, 3>类型:

#include <array>
#include <iostream>
using namespace std;
template <class T, size_t ROW, size_t COL>
using Matrix = array<array<T, COL>, ROW>;
Matrix<int, 2, 3> create_matrix(int x, int y){
Matrix<int, 2, 3> arr;
arr[0][0] = 42;
return arr;
}
int main(int argc, char *argv[])
{
auto arr = create_matrix(2,3);
cout << arr[0][0];
return 0;
}

是否可以返回Matrix<int, x, y>类型?

std::array的模板参数必须在编译时已知(在编译时为已知的文字值、const值或constexpr值)

因此,在这种情况下,不可能在运行时返回x和y传递的矩阵。

要获得这种类型的功能,您可能需要用std::vector或某种类似的动态数组类型的对象替换std:。

它看起来像XY问题。

你可以用vector<vector<int>>拼凑出一个2D"矩阵",但这有点像把轮子重新变成六边形(意思是:性能极差)。

我建议你试试线性代数库,例如Armadillo或Eigen。