C ++ هل يمكن تمرير مرجع الفئة المحلية إلى وظيفة؟

StackOverflow https://stackoverflow.com/questions/2662843

  •  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);
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top