在函数之间传递boost :: multi_array(c ++)

时间:2017-03-19 19:40:08

标签: c++ boost boost-multi-array

假设我需要一个五维数组作为类成员,并希望在不同的函数中使用它。对于这个目的,我使用boost :: multi_array例如:

class myClass {

typedef boost::multiarray<double, 5> fiveDim;
typedef fiveDim:: index index;

void init(){
fiveDim myArray(boost::extents[3][3][3][3][3]);
// I can use myArray in this scope
}

void printArray(){
// myArray not available here
}

现在,由于函数范围的原因,我显然不能在printArray()中使用myArray,但是我也无法直接在类范围内,在函数外部(在两个typedef之后)初始化数组。

如何定义数组以便每个类函数都能使用它?这些维度在编译时是已知的,并且始终相同。

1 个答案:

答案 0 :(得分:0)

也许您可以使用此:

#include <iostream>
#include <string>
#include <boost/multi_array.hpp>
#include <boost/array.hpp>
#include <boost/cstdlib.hpp>

namespace{
    constexpr size_t dim1_size = 3;
    constexpr size_t dim2_size = 3;
    constexpr size_t dim3_size = 3;
    constexpr size_t dim4_size = 3;
    constexpr size_t dim5_size = 3;
    
    void print(std::ostream& os, const boost::multi_array<double, 5>& a){
        os<<"implementation of print: "<<a[0][0][0][0][0]<<std::endl;
    }
    
    boost::multi_array<double, 5> createArray(){
        return boost::multi_array<double, 5>(boost::extents[dim1_size][dim2_size][dim3_size][dim4_size][dim5_size]);
    }
}

class myClass {

public:
    boost::multi_array<double, 5> myArray = createArray();

    void printArray(){
        print(std::cout, myArray);
    }
};

int main()
{
  myClass a;
  a.myArray[0][0][0][0][0] = 42;
  a.printArray();
}

要在函数中传递boost::multi_array,可以使用print中的引用。 要创建boost::multi_array,您必须将其作为副本返回。编译器可能会对其进行优化。