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
.