2009-08-06 3 views
8

Desidero assegnare una copia di boost :: multi_array. Come posso fare questo. L'oggetto a cui voglio assegnarlo è stato inizializzato con i costruttori predefiniti.Come assegnare/copiare un Boost :: multi_array

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?

risposta

5

È necessario ridimensionare m_f prima dell'assegnazione. Potrebbe essere simile al 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; 
} 

Potrebbe esserci un modo migliore. La conversione short a char sarà implicita. Si dovrebbe considerare l'utilizzo di se si desidera una conversione esplicita.

+5

davvero? boost non fornisce alcun modo di farlo in una riga? due al massimo? – rodrigob

+2

Non posso crederci anche io. Tanto disagio ... – ulidtko