c++ - অবজ - সি++ বই



কেন একটি ইনজেকশন ক্লাস নাম আছে? (1)

ইনজেক্টেড ক্লাসের নামটি X কে X সদস্য হিসাবে ঘোষণা করা হয়, যাতে X নাম সন্ধান সর্বদা বর্তমান শ্রেণীর খুঁজে পায়, অন্য X নয় যা একই এনক্লোोजিং স্কোকে ঘোষণা করা যেতে পারে, যেমন

void X() { }
class X {
public:
  static X create() { return X(); }
};

create() ফাংশনটি একটি অস্থায়ী X বস্তু তৈরি করছে বা ফাংশন X কল করছে? নেমস্পেস স্কোপে এটি ফাংশনটি কল করবে, তাই ইনজেক্টেড-ক্লাস-নামটির উদ্দেশ্যটি নিশ্চিত করা যে X এর দেহের মধ্যে নামটি সর্বদা ক্লাসটিকে খুঁজে পায় (কারণ নাম দেখানোর আগে ক্লাসের নিজস্ব সুযোগটি শুরু হয়) সুযোগ ঘটাচ্ছে)।

এটি ক্লাস টেমপ্লেটগুলির মধ্যেও সহায়ক, যেখানে ইনজেক্টেড ক্লাসের নামটি টেমপ্লেট আর্গুমেন্ট তালিকা ব্যতীত ব্যবহার করা যেতে পারে, যেমন সম্পূর্ণ টেমপ্লেট-আইডি Foo<blah, blah, blah> পরিবর্তে কেবল Foo ব্যবহার করে, তাই বর্তমান প্রচলনটি পড়ুন । সি + 176 এবং C ++ 98 এবং C ++ 03 এর মধ্যে একটি পরিবর্তনের জন্য ডিআর 176 দেখুন।

ইনজেক্টেড ক্লাসের নামটি সি ++ 98 এ উপস্থিত ছিল, কিন্তু শব্দটি সি ++ 03 এর জন্য নতুন ছিল।

সি ++ 98 বলেছেন:

শ্রেণি-নামটি প্রদর্শিত হওয়ার পরে তা অবিলম্বে ঘোষণা করা হয় এমন একটি শ্রেণির নাম অন্তর্ভুক্ত করা হয়। ক্লাসের নামটি ক্লাসের নিজ নিজ ক্ষেত্রেও সন্নিবেশ করা হয়।

দ্বিতীয় বাক্যটি ডিআর 147 দ্বারা পরিবর্তিত হয়েছিল তাই C ++ 03 [ক্লাস] / 2 তে বলেছে:

শ্রেণি-নামটি প্রদর্শিত হওয়ার পরে তা অবিলম্বে ঘোষণা করা হয় এমন একটি শ্রেণির নাম অন্তর্ভুক্ত করা হয়। ক্লাসের নামও ক্লাসের ক্ষেত্রে প্রবেশ করা হয়; এটি ইনজেক্টেড-ক্লাস-নাম হিসাবে পরিচিত।

এমনকি সি ++ 98 এর আগেও, এআরএম প্রায় সমান শব্দ ধারণ করে যার মানে শ্রেণীকক্ষে সর্বদা ক্লাসের নাম ব্যবহার করা যেতে পারে ক্লাসটি নিজেই উল্লেখ করে:

শ্রেণির স্পেসিফায়ারের সদস্য তালিকাতেও শ্রেণীটির নাম ক্লাস-নাম হিসাবে ব্যবহার করা যেতে পারে।

  • উদাহরণ স্বরূপ,

    class link { link* next; };

সম্প্রতি, আমি একটি অদ্ভুত C ++ বৈশিষ্ট্য দেখেছি: ইনজেক্টেড ক্লাসের নাম

class X { };
X x1;
class X::X x2; // class X::X is equal to X
class X::X::X x3; // ...and so on...

কিন্তু এই বৈশিষ্ট্যটি কেন প্রয়োজন তা আমি বুঝতে পারছি না। এই বৈশিষ্ট্য প্রয়োজন যে কোন অনুশীলন আছে?

এবং আমি শুনেছি এই বৈশিষ্ট্য পুরানো সি ++ এ বিদ্যমান ছিল না। তারপর, যখন এটি চালু করা হয়? সি ++ 03? সি ++ 11?





c++