سؤال

دعنا نقول أن لدي ناقلات STL يحتوي على نوع الفئة "XX". XX مجردة. لقد واجهت هذه المشكلة حيث لن يسمح لي المترجم "بإرساء" عندما أفعل شيئا مثل ما يلي:

std::vector<xx> victor;
void pusher(xx& thing)
{
    victor.push_back(thing);
}

void main()
{
    ;
}

أفترض أن هذا لأنه يجب استدعاء منشئ النسخ. لقد حصلت حول هذه المشكلة عن طريق تخزين XX * في المتجه بدلا من XX. هل هناك حل أفضل؟ ما هذا؟

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

المحلول

عند استخدامها push_back, ، تقوم بعمل نسخة من الكائن وتخزينه في المتجه. أثناء تقديرك، لا يعمل هذا لأنه لا يمكنك إرساء فئة مجردة، وهو أساسا ما يفعله النسخة.

ينصح باستخدام مؤشر، أو أحد أنواع العديد من أنواع المؤشرات الذكية المتوفرة في المكتبات تعزيز و لوكي.

نصائح أخرى

أن تكون أكثر كاثوليكية من البابا (أو في هذه الحالة ستيف Guidi) متطلبات الكائنات المخزنة في حاويات STL هي أنها عبارة عن نسخ قابلة للتصنيع ومحالة وفئة مجردة ليست كذلك. لذلك في هذه الحالة حاوية من المؤشرات هي الطريق للذهاب. شيء آخر يجب مراعاته في حال قررك إصلاح الأشياء من خلال عدم جعل الفصل الدراسي سيكون تشريح.

STD :: Vector (والسلع STL بشكل عام) مصمم لتخزين القيم. إذا كان لديك فئة مجردة، فلن نتمكن من التعامل مع قيمة هذا النوع، بل للتلاعب بالمؤشر أو الإشارات إليها. لذلك لديك ناقلات STD :: من الفئة المجردة لا معنى له. وحتى لو لم يكن ذلك مجرما، فليس من المنطقي عادة التعامل مع الفئة المصممة لتكون فئات أساسية كقيمة، وعادة ما يجب أن تكون غير مستقرة (نسخ منشئ وعامل التعيين المعلن عنها خاصة وغير مطبقة هي الخدعة القياسية، والراثة من فئة مناسبة هي غرضها الوحيد هو جعل سليله غير قابل للمحقق - دفعة :: غير المقنع على سبيل المثال - أصبح FashionAnle).

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