Как назначить / скопировать Boost :: multi_array - PullRequest
8 голосов
/ 06 августа 2009

Я хочу назначить копию 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?

1 Ответ

5 голосов
/ 06 августа 2009

Вы должны изменить размер 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;
}

Может быть, есть лучший способ. Преобразование short в char будет неявным. Вам следует рассмотреть возможность использования std::transform, если вы хотите явное преобразование.

...