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++ 数组包装器

使用 C++/CLI 包装器将二维数组从 C# 传递到非托管 C++

为静态库编译 SWIG Python 包装器?

P/Invoke 编组和解组 C# 和非托管 DLL 之间的二维数组、结构和指针

使用静态包装器直接调用无处不在的接口包装类时的快捷方式和建议?