Come assegnare / copiare un boost :: multi_array
-
11-09-2019 - |
Domanda
Voglio assegnare una copia di un boost :: multi_array. Come posso fare questo. L'oggetto dove voglio assegnarlo a è stato inizializzato con i costruttori predefiniti.
Questo codice non funziona, in quanto le dimensioni e le dimensioni non sono uguali
class Field {
boost::multi_array<char, 2> m_f;
void set_f(boost::multi_array<short, 2> &f) {
m_f = f;
}
}
Cosa usare al posto di m_f = f
?
Soluzione
Si dovrebbe ridimensionare m_f
prima di assegnare. Potrebbe apparire come nel seguente esempio:
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;
}
Può essere che c'è un modo migliore. short
Conversione a char
sarà implicita. Si dovrebbe considerare l'utilizzo di std::transform
se si desidera conversione esplicita.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow