Question

Je veux assigner une copie d'un coup de pouce :: multi_array. Comment puis-je faire ceci. L'objet où je veux attribuer à a été initialisé avec les constructeurs par défaut.

Ce code ne fonctionne pas, parce que les dimensions et la taille ne sont pas les mêmes

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

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

Qu'est-ce à utiliser au lieu de m_f = f?

Était-ce utile?

La solution

Vous devez redimensionner m_f avant d'attribuer. Il pourrait ressembler à l'exemple suivant:

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

Peut être il y a une meilleure façon. Conversion short à char sera implicite. Vous devriez envisager d'utiliser std::transform si vous voulez la conversion explicite.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top