سؤال

أريد تعيين نسخة من دفعة :: 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