c++ - ما هي النقطة في معرفة ما إذا كان كائن لا يتجزأ أو لا أو هو نوع فئة أم لا؟




templates (2)

إنها ليست للكتابة إلى وحدة التحكم ، هذا أمر مؤكد.

على نطاق أوسع ، أنت تسأل: ما الهدف من سمات الكتابة؟

الجواب هو metaprogramming القالب . على سبيل المثال ، يمكنني إنشاء تخصيص قالب يعمل شيئًا للأنواع المتكاملة ، وآخرًا لأنواع غير متكاملة.

لدى آرون بولمان مقدمة بسيطة لكتابة الصفات ، كما يفعل جاسيك here .

في رأيي ، سيتم العثور على معظم استخدام هذه الأشياء مدفونة ضمن تطبيقات الميزات الرائعة والفئات والأدوات المساعدة (أي في المكتبات) كجزء من آلية الخلفية التي تجعل كل شيء يعمل.

قراءة متعمقة:

  • سمات نوع C ++
  • كيف تعمل الصفوف الدراسية وماذا تفعل؟

تقدم إجابة rightfold على ذلك الأول مثالاً رائعًا على متى تكون السمات مفيدة:

على سبيل المثال ، قد يستخدم تطبيق std::copy std::memcpy داخليًا بدلاً من حلقة صريحة عندما تكون التكرارات هي مؤشرات إلى PODs. يمكن تحقيق ذلك مع SFINAE.

مرحبًا لقد رأيت العديد من الأمثلة مثل هذا في Cppreference.com:

std::is_class<T>
std::is_integral

وهكذا. أعرف ما إذا كنت أقوم بتشغيل الشفرة ، على سبيل المثال ، true أم false . ولكن ما هي الفائدة في ذلك؟ على سبيل المثال معرفة الكائن من نوع الفئة أم لا؟

#include <iostream>
#include <type_traits>

struct A {};
class B {};
enum class C {};

int main()
{
    std::cout << std::boolalpha;
    std::cout << std::is_class<A>::value << '\n';
    std::cout << std::is_class<B>::value << '\n';
    std::cout << std::is_class<C>::value << '\n';
    std::cout << std::is_class<int>::value << '\n';
}

الإخراج:

true
true
false
false
  • لقد بحثت في كل مكان عن مثال حقيقي باستخدام هذا ( is_class ، is_integral ، is_arithmetic ، ...) ولكن جميع البرامج التعليمية تظهر فقط مثال ميؤوس منها: true أو false فقط.

  • هل يمكن لأحد أن يساعدني في مثال مفيد صغير باستخدام هذه القوالب؟


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

الأمثلة المبينة على cppreference.com (مثل https://en.cppreference.com/w/cpp/types/is_enum ) مبسطة إلى حد كبير وتبين فقط كيفية استخدام السمات بطريقة غير نمطية. لن تستخدم أبدًا هذه الصفات مباشرةً في وظيفة بسيطة (وظيفة غير قالب أو فئة).





templates