تخزين الكائنات غير المتجانسة في حاويات 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