c++ - বহির্মুখী সদস্য ফাংশন সংজ্ঞায়নের জন্য কি বিশ্বব্যাপী সুযোগের নিচে কোনও পুরোপুরি যোগ্য শ্রেণীর নাম প্রয়োজন?




name-lookup global-scope (2)

This প্রশ্নটি আমাকে অবাক করে দিয়েছিল যে ক্লাসের নামগুলি (গ্লোবাল স্কোপ অপারেটর সহ) ক্লাসের বাইরে থাকা কোনও সদস্যের ফাংশন সংজ্ঞায় পুরোপুরি যোগ্যতা অর্জন করা কি দরকারী / প্রয়োজনীয়?

একদিকে, আমি এর আগে কখনও এটি দেখিনি (এবং সঠিকভাবে এটি করার সিনট্যাক্সটি অস্পষ্ট বলে মনে হয়)। অন্যদিকে, সি ++ নামের চেহারাটি খুব অ-তুচ্ছ, সুতরাং সম্ভবত কোনও কোণার কেস উপস্থিত রয়েছে।

প্রশ্ন:

কোনও ক্ষেত্রে আছে যেখানে ক্লাসের বাইরে সদস্য ফাংশন সংজ্ঞা দ্বারা পরিচয় করিয়ে দেওয়া হয়
ReturnType (::Fully::Qualified::Class::Name::MemberFunctionName)(...) { ... }
থেকে পৃথক হবে
ReturnType Fully::Qualified::Class::Name::MemberFunctionName(...) { ... } (কোনও বৈশ্বিক সুযোগ নেই :: উপসর্গ)?

নোট করুন যে সদস্য ফাংশন সংজ্ঞাগুলি অবশ্যই ক্লাস সংলগ্ন একটি নামের জায়গাতে রাখতে হবে, সুতরাং this কোনও বৈধ উদাহরণ নয়।


একটি ব্যবহার-নির্দেশিকা Fully যোগ্যতা ছাড়াই অস্পষ্ট হতে পারে।

namespace Foo {
    struct X {
    };
}

using namespace Foo;
struct X {
    void c();
};

void X::c() { } // ambiguous
void ::X::c() { } // OK

এটি প্রয়োজনীয় যদি কোনও একজন মাসোশিস্ট হন এবং এই জাতীয় লেখার উপভোগ করেন

namespace foo {
    namespace foo {
        struct bar {
            void baz();
        };
    }

   struct bar {
       void baz();
   };

   void foo::bar::baz() {
   }

   void (::foo::bar::baz)() {
   }
} 

একজন অবশ্যই দ্বিতীয় ওভারলোডকে foo::foo::bar::baz হিসাবে বিশ্বব্যাপী লিখতে পারেন তবে প্রশ্নটি ছিল দুটি ঘোষণার আলাদা অর্থ হতে পারে কি না question আমি এই জাতীয় কোড লেখার পরামর্শ দেব না।





scope-resolution-operator