سؤال

أحاول شيئًا كهذا:

Foo & operator=(Foo & to, const Bar &from);

لكني أتلقى هذا الخطأ:

E2239 'operator =(Foo &, const Bar &)' must be a member function

هل هناك قيود على المشغلين التي يمكن/لا يمكن تعريفها على أنها وظائف مجانية ، وإذا كان الأمر كذلك ، فلماذا؟

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

المحلول

يجب أن يكون مشغل الواجب وظيفة عضو غير منتظمة ويجب أن يكون لها معلمة واحدة بالضبط:

يجب تنفيذ مشغل الواجب بواسطة وظيفة عضو غير قاسية مع معلمة واحدة بالضبط (C ++ 03 13.5.3/1).

operator(), operator[], ، و operator-> يجب أيضًا تنفيذها كوظائف عضو غير منتظمة.

طبقة محددة operator new و operator delete (والمتغيرات منها) يجب تنفيذها كوظائف الأعضاء الثابتة (لاحظ أن هذه هي ثابتة ضمنية ، حتى لو لم يتم إعلانها مع static الكلمة الرئيسية).

نصائح أخرى

لا تستطيع.

السبب ، على ما أعتقد ، له علاقة بمنشئ النسخ. لديهم دلالات متشابهة للغاية ، ولا يمكنك تحديد مُنشئ النسخ خارج الفصل تمامًا مثل مُنشئ آخر. لذلك ، لم يرغبوا في فصل التوأم بعيدًا (لتجنب المفارقة التوأم :).

ملاحظة: ما هو العار في C ++ ، هو أنه لا يمكنك إضافة عضو إلى الفصل الحالي. لا يوجد سبب منخفض المستوى لذلك. إذا كان ذلك ممكنًا ، فيمكنك فصل تبعيات الرأس و CPP من خلال عدم إعلان الوظائف الخاصة في رأس تعريف الفصل.

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