C ++ هل يمكن تمرير مرجع الفئة المحلية إلى وظيفة؟
-
27-09-2019 - |
سؤال
أود أن أعرف ما إذا كان ما يلي مسموح به:
template < class C >
void function(C&);
void function() {
class {} local;
function(local);
}
شكرًا
المحلول
لا يُسمح به الآن. لكنه مدعوم في C ++ 0x. المعيار الحالي يقول في 14.3.1/2
لا يجوز استخدام نوع محلي ، نوع بدون ارتباط ، نوع لم يكشف عن اسمه أو نوع مركب من أي من هذه الأنواع كحجة قابلة للمعلمة من نوع القالب.
ومع ذلك ، إذا كانت الوظيفة محلية أيضًا ، فلا توجد مشكلة
void f() {
class L {} local;
struct C {
static void function(L &l) {
// ...
}
};
C::function(local);
}
نصائح أخرى
يُسمح بذلك إذا كنت تستخدم تعدد الأشكال بدلاً من القوالب. أو إذا لم تكن بحاجة إلى تمديد الواجهة التي شوهدت بواسطة function
, ، الميراث البسيط سوف تفعل.
void function( ABC & );
void function() {
class special : public ABC {
virtual void moof() {}
} local;
function(local);
}
لا تنتمي إلى StackOverflow