"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية استخدام Enable_if لتحديد وظائف الأعضاء بناءً على وسيطات القالب؟

كيفية استخدام Enable_if لتحديد وظائف الأعضاء بناءً على وسيطات القالب؟

تم النشر بتاريخ 2024-11-11
تصفح:612

How to Use enable_if to Select Member Functions Based on Template Arguments?

اختيار وظيفة العضو باستخدام شروط تمكين_if مختلفة

يتم استخدام الوظيفة meta_enable_if لتحديد معلمات وظيفة القالب واختيار وظائف العضو المناسبة بناءً عليها . خذ بعين الاعتبار الكود التالي:

template
struct Point
{
  // Check if T is int and call MyFunction for int
  void MyFunction(typename std::enable_if<:is_same int>::value, T &>::type* = 0)
  {
    std::cout ::value, float &>::type* = 0)
  {
    std::cout 

ومع ذلك، قد يتسبب هذا الرمز في حدوث أخطاء في برنامج التحويل البرمجي تشير إلى أنه "لا يوجد نوع مسمى 'type' في 'struct std::enable_if'".

فهمenable_if

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

في المثال أعلاه، تكون وسيطة القالب T معروفة بالفعل عند إنشاء وظائف العضو. لتنفيذ السلوك المطلوب، يمكننا إنشاء وسيطة قالب وهمية افتراضيًا إلى T وتنفيذ SFINAE باستخدامها:

template
struct Point
{
  template
  typename std::enable_if<:is_same int>::value>::type
    MyFunction()
  {
    std::cout 
  typename std::enable_if<:is_same float>::value>::type
    MyFunction()
  {
    std::cout 
أحدث البرنامج التعليمي أكثر>

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

Copyright© 2022 湘ICP备2022001581号-3