2009-08-06 6 views
8

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

Dieser Code funktioniert nicht, da die Abmessungen und Größe sind nicht die gleichen

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?

Antwort

5

Sie sollten die Größe m_f vor der Zuweisung ändern. 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. Konvertierung short zu char wird implizit sein. Sie sollten std::transform verwenden, wenn Sie eine explizite Konvertierung wünschen.

+5

wirklich? Boost bietet keine Möglichkeit, dies in einer Zeile zu tun? höchstens zwei? – rodrigob

+2

Das kann ich auch nicht glauben. So viel Unannehmlichkeit ... – ulidtko

Verwandte Themen