سؤال

أحاول استخدام لحظة من فئة مخصصة كمعلمة قالب.

class X {
public:
  X() {};
};

template <class Foo, Foo foo>
struct Bar {

};
const X x;
Bar<X, x> foo;

ينص المترجم على ذلك x لا يمكن أن تظهر في تعبير مستمر. لماذا ذلك؟ هناك كل ما يعطى لبناء هذا الكائن في وقت الترجمة.

هل كانت مفيدة؟

المحلول

لا يمكنك فعل ذلك. المعيار 14.1 يقول:

4 يجب أن يكون المعلمة غير النوعية من النوع واحد من أنواع ما يلي (مؤهل اختياريًا للسيرة الذاتية):
- نوع متكامل أو تعداد ،
- مؤشر إلى كائن أو مؤشر للعمل ،
- الإشارة إلى كائن أو إشارة إلى الوظيفة ،
- مؤشر للعضو.
5 ملاحظة: يتم عدم السماح بأنواع أخرى إما أدناه أو ضمنيًا من خلال القواعد التي تحكم شكل القالب-الحجج(14.3). -ملاحظة] يتم تجاهل الماليفيات ذات المستوى الأعلى على المستوى على المعلمة القالب عند تحديد نوعه.

نصائح أخرى

كما أشار الآخرون ، لا يمكنك فعل ذلك. طالما أنك لا تلعب ألعاب برمجة الفوقية ، فإن الطريقة العادية لتمرير مثيل فعلي للفئة في المُنشئ:

template <class Foo>
struct Bar {
    Bar( const Foo & f ) {
      ...
    }
};

يمكن أن تكون معلمات القالب أنواعًا ، أو ثوابت متكاملة. X هو نوع ، ولكن x ليس. لا يمكنك أيضًا استخدام قيم نقطة عائمة ثابتة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top