Frage

Ich möchte eine Kopie einer boost :: multi_array zuzuweisen. Wie kann ich das machen. Das Objekt, wo ich will es zuzuordnen ist mit den Standardkonstruktoren initialisiert wurde.

Dieser Code funktioniert nicht, da die Abmessungen und Größe ist nicht die gleiche

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

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

Was statt m_f = f zu benutzen?

War es hilfreich?

Lösung

Sie sollten die Größe m_f vor zuweisen. Es könnte wie folgt aussehen in dem folgenden Beispiel:

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

Vielleicht gibt es einen besseren Weg. Umwandlung short zu char wird implizit sein. Sie sollten mit std::transform prüfen, ob Sie explizite Konvertierung wollen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top