Comment assigner / copier un Boost :: multi_array
-
11-09-2019 - |
Question
Je veux assigner une copie d'un coup de pouce :: multi_array. Comment puis-je faire ceci. L'objet où je veux attribuer à a été initialisé avec les constructeurs par défaut.
Ce code ne fonctionne pas, parce que les dimensions et la taille ne sont pas les mêmes
class Field {
boost::multi_array<char, 2> m_f;
void set_f(boost::multi_array<short, 2> &f) {
m_f = f;
}
}
Qu'est-ce à utiliser au lieu de m_f = f
?
La solution
Vous devez redimensionner m_f
avant d'attribuer. Il pourrait ressembler à l'exemple suivant:
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;
}
Peut être il y a une meilleure façon. Conversion short
à char
sera implicite. Vous devriez envisager d'utiliser std::transform
si vous voulez la conversion explicite.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow