C++ 静态多数组包装器
Posted
技术标签:
【中文标题】C++ 静态多数组包装器【英文标题】:C++ static multi array wrapper 【发布时间】:2012-09-08 16:35:52 【问题描述】:当作为参数传递或作为值返回时,旧的 c 风格的静态数组可能会很麻烦。为此,新的 std::array 非常方便。
但是对于多数组,std:: 中没有任何内容,并且 boost::multi_array 不仅仅是静态分配的。
当然,我可以说,
std::array<std::array<int,3>,2> my_array;
但我发现它有点长,它对应于倒置的内置声明
int my_array[2][3];
我只是想知道是否已经有一些“库”编码这样一个概念(二维或任意维)
(对于后者,如果我是正确的,必须使用一些可变参数模板来输入例如
multi_array<int,3,4> A;
multi_array<int,3,5,8> B;
multi_array<int,4,7,8,9,8,3> C; //this one being quite rare though
)
编辑:对第一篇文章感到抱歉,我没有测试
【问题讨论】:
"但是 my_array[1][2] 和 (...) 中的不一样" 你是什么意思?它是一样的。 是的,对此我很抱歉,我只是绝对确定但没有测试(我知道,我知道......,这很糟糕) 【参考方案1】:这对您的应用程序来说可能有点过头了,但我使用过 Eigen 库,并认为 family of Matrix template classes 可能对您有用。一个例子:
Eigen::Matrix<float, 3, 2> a;
a(1,0) = 1.1;
a(0,1) = 17.5;
编辑 1: 糟糕,我不确定它是否支持 N 维矩阵。但对于二维的,我知道这很好。
我认为您可以使用 typedef,无论是与 Eigen 还是 std::array
,都可以使您的类型更具可读性。
【讨论】:
谢谢。我也认为对于没有特定数学意义的数组来说也太过分了。我也在做线性代数,所以这个库可能很有用以上是关于C++ 静态多数组包装器的主要内容,如果未能解决你的问题,请参考以下文章
如何将 C++ dll 静态链接到 .NET 库(将 c++ dll 构建到网络包装器 dll 以获取一个 dll)
使用 C++/CLI 包装器将二维数组从 C# 传递到非托管 C++