2009-08-06 10 views
8

Quiero asignar una copia de un boost :: multi_array. Cómo puedo hacer esto. El objeto donde quiero asignarlo se ha inicializado con los constructores predeterminados.Cómo asignar/copiar un Boost :: multi_array

Este código no funciona, debido a las dimensiones y tamaño no son los mismos

class Field { 
    boost::multi_array<char, 2> m_f; 

    void set_f(boost::multi_array<short, 2> &f) { 
    m_f = f; 
    } 
} 

lo que debe usar en lugar de m_f = f?

Respuesta

5

Debe cambiar el tamaño de m_f antes de asignar. Podría verse en el siguiente ejemplo:

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; 
} 

Puede haber una manera mejor. La conversión short a char será implícita. Debe considerar usar std::transform si desea una conversión explícita.

+5

realmente? boost no proporciona ninguna forma de hacerlo en una línea? dos como máximo? – rodrigob

+2

No puedo creer eso también. Tanto de inconveniencia ... – ulidtko

Cuestiones relacionadas