在此代码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>
类型?
答案 0 :(得分:3)
std :: array的模板参数必须在编译时知道(在编译时已知的文字值,const值或constexpr值)
因此,在这种情况下,无法在运行时返回带有x和y的矩阵。
要获得这种类型的功能,您可能需要将std :: array替换为std :: vector或类似的动态数组类型的对象,即使这样,您也必须重新构造代码,不要将值作为模板参数
答案 1 :(得分:1)
看起来像XY problem.
你可以将一个2D“矩阵”与vector<vector<int>>
混在一起,但这有点像六角形一样重新投射轮子(意思是:表现极差)。