سؤال

دفعة :: البديل يدعي أنها نوع القيمة. هل هذا يعني أنه من الآمن كتابته ببساطة كتابة التمثيل الخام لتعزيز :: متغير وتحميله لاحقا، طالما أنه يحتوي فقط على أنواع جراب؟ افترض أنه سيتم إعادة تحميله بواسطة الرمز الذي تم جمعه بواسطة نفس المترجم، ونفس إصدار دفعة، على نفس الهندسة المعمارية.

أيضا، (ربما) معادل، يمكن أن يعزز :: البديل يستخدم في الذاكرة المشتركة؟

هل كانت مفيدة؟

المحلول

فيما يتعلق بالتسلسل: يجب أن تعمل، نعم. ولكن لماذا لا تستخدم boost::variantآلية الزيارة لكتابة النوع الفعلي الوارد في البديل؟

struct variant_serializer : boost::static_visitor<void> {
    template <typename T>
    typename boost::enable_if< boost::is_pod<T>, void>::type
    operator()( const T & t ) const {
        // ... serialize here, e.g.
        std::cout << t;
    }
};

int main() {

    const boost::variant<int,char,float,double> v( '1' );

    variant_serializer s;
    boost::apply_visitor( s, v );

    return 0;
}

فيما يتعلق بالذاكرة المشتركة: boost::variant لا يقوم بتخصيص كومة الكومة، حتى تتمكن من وضعه في الذاكرة المشتركة تماما مثل int, ، على افتراض المزامنة المناسبة، بالطبع.

وغني عن القول، كما قلت، ما سبق صالح فقط إذا كان البديل يمكن أن يحتوي فقط على أنواع جراب.

نصائح أخرى

حاول فقط بما في ذلك زيادة / التسلسل / variant.hpp؛ يفعل العمل من أجلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top