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


14

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

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

প্রশ্ন:

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

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


উত্সাহী এই প্রশ্নটি সম্পর্কে ডাউন-ভোক্তাদের কী অপছন্দ করে তা খুব কৌতূহল। মতামত স্বাগত!
ম্যাক্স ল্যাঙ্গোফ

যখন সংজ্ঞা ঘোষণার চেয়ে আলাদা নামস্থানে স্থাপন করা হয়? আপনি যে লিঙ্কটি অনুসন্ধান করেছেন তার জন্য আমি যা মনে রেখেছিলাম তা হ'ল
idclev 463035818


@ প্রাক্তন অজ্ঞাত 66630৩৮৮১৮ এটাই আমার মনে ছিল, তারপরে আমি এটি চেষ্টা করে বুঝলাম এটি কার্যকর হবে না, তাই আমি প্রশ্নটি লিখেছিলাম (অন্যরাও অবাক হবেন)।
ম্যাক্স ল্যাংফোফ

উত্তর:


12

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

namespace Foo {
    struct X {
    };
}

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

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

5

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

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

   struct bar {
       void baz();
   };

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

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

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


হ্যাঁ, এটি প্রকৃতপক্ষে একটি বৈধ উত্তর এবং এমনকি এর কোনও প্রয়োজনও নেই using। বিভিন্ন মামলা হাইলাইট করে ভাল লাগল!
ম্যাক্স ল্যাঙ্গোফ

2

যদি কোনও ব্যবহারের নির্দেশিকা ব্যবহার করা হয় তবে একটি বিভ্রান্তিকর কোড থাকতে পারে।

নিম্নলিখিত বিক্ষোভমূলক প্রোগ্রাম বিবেচনা করুন

#include <iostream>
#include <string>

namespace N1
{
    struct A
    {
        void f() const;
    };      
}

using namespace N1;

void A::f() const { std::cout << "N1::f()\n"; }

struct A
{
    void f() const;
};

void ::A::f() const { std::cout << "::f()\n"; }

int main() 
{
    N1::A().f();
    ::A().f();

    return 0;
}

পাঠযোগ্যতার জন্য তাই এই যোগ্য নাম

void ::A::f() const { std::cout << "::f()\n"; }

ফাংশনটি কোথায় ঘোষণা করা হয়েছে তা অবিকল দেখায়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.