سؤال

عند تأليف مكتبة في مساحة اسم معين، فإنه غالبا ما يكون ملائم لتزويد مشغلي طاقتها للطبقات في ذلك مساحة الاسم. ويبدو (على الأقل مع g ++) أن مشغلي زائد يمكن تنفيذها إما في مساحة اسم المكتبة:

namespace Lib {
class A {
};

A operator+(const A&, const A&);
} // namespace Lib

وأو مساحة الاسم العالمي

namespace Lib {
class A {
};
} // namespace Lib

Lib::A operator+(const Lib::A&, const Lib::A&);

ومن بلدي التجارب، وكلاهما يبدو للعمل بشكل جيد. هل هناك أي فرق عملي بين هذين الخيارين؟ إما نهج أفضل؟

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

المحلول

ويجب أن تحدد لهم في مساحة الاسم المكتبة. فإن المترجم العثور عليها على أي حال من خلال حجة البحث التابع.

لا حاجة لتلويث مساحة الاسم العالمي.

نصائح أخرى

وضعه في مساحة الاسم مكتبة يعمل بسبب كونيغ البحث .

ويجب تحديد ذلك في مساحة الاسم، سواء بسبب بناء الجملة ستكون أقل مطول وليس فوضى مساحة الاسم العالمي.

في الواقع، إذا قمت بتعريف الزائدة الخاصة بك في تعريف الفئة، وهذا يصبح السؤال موضع نقاش:

namespace Lib {

class A {
public:
    A operator+(const A&);
};

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