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

لماذا يفشل التخصص الصريح لأعضاء فئة C ++ خارج مساحة الاسم؟

نشر في 2025-04-18
تصفح:701

Why Does Explicit Specialization of Class Members Fail Outside a Namespace in C  ?

ومع ذلك ، فإن وضع التخصصات الصريحة أمر بالغ الأهمية ، كما يتضح من مقتطف الكود التالي:

قالب فئة cconstraint { // ... قالب void التحقق (موضع int ، قيود int []) { } قالب void تحقق من (int ، int []) { } ؛ في المثال أعلاه ، لم يتم الإعلان عن CCORNORAINT داخل أي مساحة اسم ، وبالتالي فإن التخصص الصريح للتحقق غير صالح.

، ومع ذلك ، لا يتوافق مع المترجمين في هذه الحالة. هذا السلوك غير ستاندرد ولا ينبغي الاعتماد عليه. فيما يلي نسخة مصححة من الكود:

مساحة الاسم myNamesPace { قالب فئة cconstraint { // ... قالب void التحقق (موضع int ، قيود int []) { } قالب void تحقق من (int ، int []) { } } ؛ }
template
class CConstraint
{
    // ...

    template 
    void Verify(int position, int constraints[])
    {
    }

    template 
    void Verify(int, int[])
    {
    }
};
عن طريق تغليف cconstraint ضمن مساحة اسم mynamespace ، فإننا نضمن أن يتم الإعلان عن تخصصاتها الصريحة أيضًا ضمن مساحة الاسم ، وحل خطأ التجميع. الإجابة:

تفاصيل مساحة الاسم { قالب void التحقق (int ، int []) {} قالب void تحقق من (int ، int []) {} } قالب class cconstraint { // ... قالب void التحقق (موضع int ، قيود int []) { التفاصيل :: تحقق من (الموضع ، القيود) ؛ } } ؛
أحدث البرنامج التعليمي أكثر>

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

Copyright© 2022 湘ICP备2022001581号-3