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?

È stato utile?

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
scroll top