"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية تخزين الكائنات غير المتجانسة في حاويات C++: Boost::any أو التنفيذ المخصص؟

كيفية تخزين الكائنات غير المتجانسة في حاويات C++: Boost::any أو التنفيذ المخصص؟

تم النشر بتاريخ 2024-11-08
تصفح:561

 How to Store Heterogeneous Objects in C   Containers: boost::any or Custom Implementation?

تخزين الكائنات غير المتجانسة في حاويات C

تتطلب حاويات C عادةً عناصر متجانسة، مما يعني أنها يمكنها الاحتفاظ فقط بكائنات من نوع واحد. ومع ذلك، هناك حالات قد تحتاج فيها إلى حاوية يمكنها استيعاب مزيج من أنواع البيانات. تستكشف هذه المقالة كيفية تحقيق ذلك باستخدام Boost::any Library ونهج مخصص.

باستخدام Boost::any

Boost::any هي فئة قالب يمكنه حمل أي نوع C. من خلال تخزين مثيلات Boost::any في حاوية، يمكنك الحصول على مجموعة غير متجانسة من الكائنات. يوصى بهذا الأسلوب بسبب متانته وتعامله مع حالات الحافة.

التنفيذ المخصص

إذا كنت تفضل نهجًا أكثر يدوية، فيمكنك إنشاء بنية مخصصة أو اتحاد يجمع أعضاء من جميع الأنواع المتوقعة مع مؤشر لتحديد النوع النشط.

نهج الهيكل:

struct HeterogeneousContainer { كثافة العمليات أنا؛ الأمراض المنقولة جنسيا::سلسلة ق؛ مزدوج د؛ نوع كثافة العمليات؛ // 0 لـ int، 1 للسلسلة، 2 لـ double };
struct HeterogeneousContainer {
  int i;
  std::string s;
  double d;
  int type; // 0 for int, 1 for string, 2 for double
};
نهج الاتحاد (استخدم بحذر):

union HeterogeneousContainer { كثافة العمليات أنا؛ الأمراض المنقولة جنسيا::سلسلة ق؛ مزدوج د؛ };
union HeterogeneousContainer {
  int i;
  std::string s;
  double d;
};

لا تسمح النقابات إلا بعضو نشط واحد في كل مرة.
  • قراءة عضو غير نشط قد يؤدي إلى سلوك غير محدد.
  • مطلوب معالجة دقيقة لضمان تحديد النوع الصحيح والوصول إليه.
الاستنتاج

عند المواجهة الحاجة إلى تخزين كائنات غير متجانسة في حاوية C، فكر في استخدام Boost::any Library لسلامتها وفعاليتها. إذا رغبت في ذلك، يمكن إنشاء تطبيق مخصص باستخدام بنية أو اتحاد، ولكن ضع في اعتبارك القيود الخاصة بها.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3