قالب الأعضاء في الفصل المحلي
-
29-09-2019 - |
سؤال
بالنظر إلى الرمز التالي:
void f()
{
class A
{
template <typename T>
void g() {}
};
}
G ++ 4.4 (وكذلك g++-4.6 -std=gnu++0x
) يشكو: "إعلان غير صالح لقالب الأعضاء في الفصل المحلي".
على ما يبدو ، لا يُسمح للفصول المحلية بوجود أعضاء في القالب. ما هو الغرض من هذا القيد؟ هل سيتم إزالته في C ++ 0x؟
ملاحظة: إذا جعلت الفصل المحلي نفسه قالبًا ، بدلاً من إعطائه عضوًا في القالب:
void f()
{
template <typename T>
class A
{
void g() {}
};
}
أحصل على "خطأ: لا يمكن أن يظهر إعلان قالب في نطاق الكتلة".
المحلول
الغرض من هذا القيد؟ مجرد تخمين ، ولكن:
- يمكنك استخدام وظيفة عضو فئة/قالب القالب فقط ضمن وظيفة الأرفق. لذلك ، فأنت تعرف بالفعل جميع الأنواع المستخدمة داخل الوظيفة ، وبالتالي يمكنك تحديد الأنواع المستخدمة مباشرة (لعدة أنواع ، بالطبع ، كان متغير القالب قد حفظ بعض الكتابة).
- على الرغم من أنه قد لا يبدو الأمر كذلك ، إلا أنه يعمل لجميع منشئي المترجمات ومساحة الحشرات ، وبالتالي يجب أن يكون هذا الجهد.
حقيقة ممتعة: حاول استخدام فئة محلية ضمن وظيفة كنوع إرجاع لـ (C ++ 0x) -lambda وظيفة تم الإعلان عنها في الوظيفة: MSVC 2010: خطأ في المترجم الداخلي ^ ^.
لا تنتمي إلى StackOverflow