質問

私はブースト:: multi_arrayのコピーを割り当てます。これどうやってするの。私はそれを割り当てたいオブジェクトはデフォルトコンストラクタで初期化されています。

寸法とサイズが同じでないため、

このコードは、動作しない

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

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

の代わりにm_f = fを使用するためには?

役に立ちましたか?

解決

あなたは割り当てる前m_fのサイズを変更する必要があります。これは、次のサンプルでは次のようになります:

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

より良い方法があるかもしれませ。 shortへの変換charは、暗黙的になります。あなたが明示的な変換が必要な場合には、std::transformの使用を検討する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top