Как назначить / скопировать Boost::multi_array
-
11-09-2019 - |
Вопрос
Я хочу назначить копию 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
если вы хотите явного преобразования.
Не связан с StackOverflow