繁体   English   中英

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

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

在此代码中, 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的Matrix。

要获得这种功能,您可能需要将std :: array替换为std :: vector或某些类似的动态数组类型的对象,即使这样,您也必须重新构造代码,以免将值用作模板参数。

看起来像XY问题。

您可以使用vector<vector<int>>一起破解2D“矩阵”,但这有点像是六角形(意味:性能极差)。

我建议您尝试使用线性代数库,例如ArmadilloEigen

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM