Как назначить / скопировать Boost::multi_array
Я хочу назначить копию 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 ответ
Решение
Вы должны изменить размер 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
если вы хотите явное преобразование.