Вопрос

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

Это было полезно?

Решение

Вы должны изменить размер 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 если вы хотите явного преобразования.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top