9

我想分配一个 boost::multi_array 的副本。我怎样才能做到这一点。我想将其分配给的对象已使用默认构造函数进行了初始化。

此代码不起作用,因为尺寸和大小不一样

class Field {
  boost::multi_array<char, 2> m_f;

  void set_f(boost::multi_array<short, 2> &f) {
    m_f = f;
  }
}

用什么代替m_f = f

4

1 回答 1

6

您应该m_f在分配之前调整大小。它可能类似于以下示例:

void set_f(boost::multi_array<short, 2> &f) {
    std::vector<size_t> ex;
    const size_t* shape = f.shape();
    ex.assign( shape, shape+f.num_dimensions() );
    m_f.resize( ex );
    m_f = f;
}

可能有更好的方法。转换shortchar将是隐式的。std::transform如果要显式转换,则应考虑使用。

于 2009-08-06T09:42:38.410 回答