اختيار وظيفة العضو باستخدام شروط تمكين_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