students - google c++




كيف تعمل فئات الصفات؟ (2)

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

أنا أقرأ سكوت مايرز ' فعال C ++ . إنه يتحدث عن صفات الصفات ، أدركت أنني بحاجة إليهم لتحديد نوع الكائن أثناء وقت التجميع ، ولكن لا أستطيع أن أفهم تفسيره حول ما تفعله هذه الفصول بالفعل؟ (من الناحية الفنية)


ربما كنت تتوقع نوعا من السحر الذي يجعل نوع الصفات تعمل. في هذه الحالة ، خيب ظن - لا يوجد السحر. يتم تحديد سمات الكتابة يدويًا لكل نوع. على سبيل المثال ، ضع في اعتبارك iterator_traits ، الذي يوفر الرموز المطبوعة (مثل value_type ) للمكررات.

باستخدامها ، يمكنك الكتابة

iterator_traits<vector<int>::iterator>::value_type x;
iterator_traits<int*>::value_type y;
// `x` and `y` have type int.

ولكن لجعل هذا العمل ، هناك بالفعل تعريف واضح في مكان ما في العنوان <iterator> ، والذي يقرأ شيئًا كهذا:

template <typename T>
struct iterator_traits<T*> {
    typedef T value_type;
    // …
};

هذا هو التخصص الجزئي لنوع iterator_traits لأنواع النموذج T* ، أي مؤشرات لبعض الأنواع العامة.

في نفس السياق ، يتم typename vector<T>::iterator iterator_traits typename vector<T>::iterator الأخرى ، على سبيل المثال typename vector<T>::iterator .





traits