2009-08-06 8 views
8

boost :: multi_arrayのコピーを割り当てたいと思います。これどうやってするの。私が割り当てたいオブジェクトは、デフォルトコンストラクタで初期化されています。寸法やサイズがm_f = fの代わりに使用することは何 Boost :: multi_arrayの割り当て/コピー方法

同じ

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

    void set_f(boost::multi_array<short, 2> &f) { 
    m_f = f; 
    } 
} 
ではありませんので、

このコードは、動作しませんか?

答えて

5

割り当てる前に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; 
} 

もっと良い方法があるかもしれません。 shortcharの変換は暗黙的に行われます。明示的な変換が必要な場合は、std::transformの使用を検討する必要があります。

+5

? boostは1行でこれを行う方法を提供していませんか?せいぜい2つ? – rodrigob

+2

私はそれも信じられません。そんなに不便なことは... – ulidtko

関連する問題