Pregunta

Quiero asignar una copia de un impulso :: multi_array. Cómo puedo hacer esto. El objeto donde quiero asignarlo a se ha inicializado con los constructores por defecto.

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 hay que utilizar en lugar de m_f = f?

¿Fue útil?

Solución

Debe cambiar el tamaño m_f antes de asignar. Podría verse como 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 ser que hay una manera mejor. short conversión a char será implícita. Debe considerar el uso std::transform si quieres conversión explícita.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top