Como atribuir / copiar um boost :: multi_array
-
11-09-2019 - |
Pergunta
Eu quero atribuir uma cópia de um boost :: multi_array. Como posso fazer isso. O objeto onde eu quero atribuí-lo a foi inicializado com os construtores padrão.
Este código não funciona, porque as dimensões e tamanho não são os mesmos
class Field {
boost::multi_array<char, 2> m_f;
void set_f(boost::multi_array<short, 2> &f) {
m_f = f;
}
}
O que usar em vez de m_f = f
?
Solução
Você deve redimensionar m_f
antes de atribuir. Ele poderia olhar como no exemplo a seguir:
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;
}
Pode ser que há uma maneira melhor. short
conversão para char
será implícita. Você deve considerar o uso std::transform
se você quiser conversão explícita.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow