Frage So weisen Sie einen Boost :: multi_array zu / kopieren ihn


Ich möchte eine Kopie von boost :: multi_array zuweisen. Wie kann ich das machen. Das Objekt, dem ich es zuweisen möchte, wurde mit den Standardkonstruktoren initialisiert.

Dieser Code funktioniert nicht, da die Dimensionen und die Größe nicht identisch sind

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

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

Was zu verwenden statt m_f = f ?


8
2017-08-06 08:55


Ursprung


Antworten:


Sie sollten die Größe ändern m_f vor dem Zuweisen. Es könnte wie im folgenden Beispiel aussehen:

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 in Betracht ziehen std::transform Wenn Sie eine explizite Konvertierung wünschen.


5
2017-08-06 09:42