提升用户定义的类对象的多重阵列

时间:2014-03-06 18:41:59

标签: c++ boost

我需要描述一个对象类的两个维度的多重阵列,即myclass。可能吗?或者只能将标准类型定义为多重阵列,如int,double等

提前感谢您的回答

3 个答案:

答案 0 :(得分:0)

是的,它是一个类模板。它旨在取代std :: vector嵌套,并使用更少的内存。 boost::multi_array<myclass, 2>,创建一个myclass的二维数组。

答案 1 :(得分:0)

与“原生”C ++数组不同,boost多数组具有值语义。

您的元素类型必须是可复制的,因为multi_array承诺可以复制:

  

multi_array

     

...

     

Model Of。* MultiArrayCopyConstructible。根据元素类型,它还可以为EqualityComparableLessThanComparable建模。

比较以下内容:

#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命名空间。