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

لماذا يتطلب استدعاء قالب وظيفة عضو من وظيفة تم تصميمها الكلمة الرئيسية "القالب"؟

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

Why Does Invoking a Member Function Template from a Templated Function Require the `template` Keyword?

وظيفة العضو لاستدعاء فئة قالب من وظيفة قالب

في مقتطف التعليمات البرمجية المقدم، يؤدي استدعاء قالب وظيفة عضو من داخل قالب آخر إلى خطأ في التجميع. على وجه التحديد، يحاول الرمز استدعاء A::f() من داخل g(). ومع ذلك، يفشل هذا بسبب مشكلة في بناء الجملة.

لحل هذه المشكلة، يجب تحديد الكلمة الأساسية للقالب بشكل صريح قبل استدعاء وظيفة العضو. وذلك لأنه وفقًا لمعيار C '03 14.2/4، عندما يظهر اسم تخصص قالب العضو بعد تعبير لاحق أو معرف مؤهل يعتمد على معلمة القالب، يجب أن يكون اسم قالب العضو مسبوقًا بالكلمة الأساسية للقالب .

لذلك الكود التالي صحيح:

template void g()
{
   A a;
   a.template f();  // Explicitly specify 'template' keyword
}

من خلال إضافة الكلمة الأساسية للقالب، يمكن للمترجم تحديد أن f هو قالب عضو في قالب الفئة A بشكل صحيح، ويمكنه استدعاء A::f() بنجاح.

أحدث البرنامج التعليمي أكثر>

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

Copyright© 2022 湘ICP备2022001581号-3