سؤال

أحاول إيجاد طريقة عامة للوصول إلى مجموعة من الحاويات.لدي ناقل قياسي وقائمة بالإضافة إلى قائمة مخصصة أخرى.

تحدد القائمة المخصصة مكررًا؛

class Iterator: public std::iterator<std::forward_iterator_tag, T> {
    // ...
}

Iterator begin() {
    return (Iterator(root));
}

Iterator end() {
    return (Iterator(NULL));
}

مع تحميل المشغلين المناسبين.

من الناحية المثالية، أود أن أفعل هذا؛

class Foo {
public:
    Foo() {
        std::list<int> x;
        std::vector<int> y;
        custom_list<int> z;

        iter = x.begin(); // OR
        iter = y.begin(); // OR
        iter = z.begin();

        // ...
    };
private:
    std::iterator<int> iter;
};

ولكن من الواضح أن هذه كلها مكررات من أنواع مختلفة.يمكنني أن أفترض أن جميع الحاويات من نفس النوع.

هل هناك طريقة أنيقة لحل هذه المشكلة؟

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

المحلول

فيما يلي بعض المقالات التي قد تجدها ذات فائدة

إعطاء مكررات STL فئة أساسية

مسح النوع لمكررات C++

مرجع فئة Any_iterator

نصائح أخرى

أن تأتي متأخرا أفضل من ألا تأتي أبدا...

العدد الأخير من سي-فو ظهرت وتخمين ما كان فيه:هذا صحيح، التكرارات التي تفعل ذلك بالضبط ماذا تريد.

لسوء الحظ عليك أن تصبح عضوا في أكيو لعرض المجلة (تشير المقالة إلى مقالة Overload من عام 2000 والتي يرتبط بها ديفيد).ولكن مقابل سعر زهيد سنويًا، يمكنك الحصول على مجلة رائعة للقراءة ومؤتمرات ومجموعات مستخدمين.عندما تصبح عضوًا، يمكنك عرض ملفات PDF الخاصة بالأعداد السابقة ماذا تنتظر?

حالة من الحذر فيما تطلبه.تعمل فئات Any_iterator التي تراها على مجموعة غير محدودة من أنواع التكرارات.لديك ثلاثة فقط، والتي تعرفها مقدمًا.بالتأكيد، قد تحتاج إلى إضافة نوع رابع في المستقبل، ولكن ماذا لو استغرق ذلك سطرًا إضافيًا من التعليمات البرمجية؟

الميزة الكبرى للمجموعة المغلقة من الأنواع المضمنة المحتملة هي أن لديك حدًا أعلى لـ sizeof()، مما يعني أنه يمكنك تجنب الكومة والخطأ الذي تجلبه.بشكل أساسي، قم بحشوها جميعًا في Boost::variant واتصل بـ application_visitor.

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