我需要描述一个对象类的两个维度的多重阵列,即myclass。可能吗?或者只能将标准类型定义为多重阵列,如int,double等
提前感谢您的回答
答案 0 :(得分:0)
是的,它是一个类模板。它旨在取代std :: vector嵌套,并使用更少的内存。 boost::multi_array<myclass, 2>
,创建一个myclass的二维数组。
答案 1 :(得分:0)
与“原生”C ++数组不同,boost多数组具有值语义。
您的元素类型必须是可复制的,因为multi_array
承诺可以复制:
multi_array
...
Model Of。*
MultiArray
,CopyConstructible
。根据元素类型,它还可以为EqualityComparable
和LessThanComparable
建模。
比较以下内容:
#include <boost/multi_array.hpp>
using Arr = boost::multi_array<int, 3>;
struct Ok { };
struct NotOk : boost::noncopyable { };
int main()
{
boost::multi_array<int, 3> arr1(boost::extents[7][6][3]); // ok
boost::multi_array<Ok, 3> arr2(boost::extents[7][6][3]); // ok
boost::multi_array<NotOk, 3> arr3(boost::extents[7][6][3]); // COMPILE ERROR
}
查看 On Coliru
答案 2 :(得分:0)
是的,我试过
typedef boost::multi_array<Pixel, 2> pixel_2d_t;
(Pixel是我的班级)并在头文件Pixel.h中定义Pixel
class Pixel:
public IRDetectorComponent<Pixel>::Type
,public det::IRPositionable<Pixel>
{
public:
static const char* const kComponentName;
static const char* const kComponentId;
/**
* Pixel Status definition
*/
enum Status {
eGood = 0,
eBadCalibration = 1,
eUnknown
};
... ...
但我得到了错误
/home/lperal/jemeuso/jape/External/boost/1_55_0/include/boost/multi_array/base.hpp:139:25:错误:指向不完整类型的指针算术 &#39; irdet :: CCD ::像素&#39; TPtr newbase = base + idx * strides [0];
作为CCD.h,我已经将多阵列定义为irdet命名空间。