আমার কোডিংয়ের শৈলীতে নিম্নলিখিত আইডিয়ামটি অন্তর্ভুক্ত রয়েছে:
class Derived : public Base
{
public :
typedef Base super; // note that it could be hidden in
// protected/private section, instead
// Etc.
} ;
এটি আমাকে বেসের একটি উপন্যাস হিসাবে "সুপার" ব্যবহার করতে সক্ষম করে, উদাহরণস্বরূপ, নির্মাণকারীগুলিতে:
Derived(int i, int j)
: super(i), J(j)
{
}
বা এমনকি তার ওভাররাইড সংস্করণে বেস শ্রেণি থেকে পদ্ধতিটি কল করার সময়:
void Derived::foo()
{
super::foo() ;
// ... And then, do something else
}
এটি এমনকি শৃঙ্খলাবদ্ধ হতে পারে (যদিও এর জন্য আমার এখনও সন্ধান পাওয়া যায়):
class DerivedDerived : public Derived
{
public :
typedef Derived super; // note that it could be hidden in
// protected/private section, instead
// Etc.
} ;
void DerivedDerived::bar()
{
super::bar() ; // will call Derived::bar
super::super::bar ; // will call Base::bar
// ... And then, do something else
}
যাইহোক, আমি "টাইপিডেফ সুপার" এর ব্যবহারটি খুব দরকারী মনে করি, উদাহরণস্বরূপ, যখন বেস হয় ভার্বোস এবং / অথবা টেম্প্ল্যাটেড হয়।
আসল বিষয়টি হ'ল সুপার জাভাতে প্রয়োগ করা হয়, পাশাপাশি সি # তে (যেখানে আমি ভুল না হলে এটি "বেস" বলা হয়)। তবে সি ++ এর এই কীওয়ার্ডের অভাব রয়েছে।
সুতরাং, আমার প্রশ্নগুলি:
- টাইপএফের ব্যবহারটি কি সুপার / সাধারণ / বিরল / আপনি যে কোডটি ব্যবহার করেন তার মধ্যে কখনই দেখা যায় না?
- টাইপেফ সুপার ওকের এই ব্যবহারটি (যেমন আপনি এটি ব্যবহার না করার জন্য দৃ strong় বা এত শক্ত কারণ দেখেন না)?
- "সুপার" ভাল জিনিস হওয়া উচিত, এটি কি কিছুটা সি ++ তে প্রমিত করা উচিত, নাকি টাইপডিফের মাধ্যমে এটি ইতিমধ্যে যথেষ্ট?
সম্পাদনা: রডি টাইপডিফের ব্যক্তিগত হওয়া উচিত বলে উল্লেখ করেছিলেন। এর অর্থ হ'ল যে কোনও উদ্ভূত শ্রেণি এটি পুনরায় ঘোষনা না করে ব্যবহার করতে সক্ষম হবে না। তবে আমার ধারণা, এটি সুপার :: সুপার চেইনগুলিকেও আটকাতে পারে (তবে কে এর জন্য কে কাঁদবে?)।
সম্পাদনা 2: এখন, "সুপার" ব্যাপকভাবে ব্যবহার করার কয়েক মাস পরে, আমি রডির দৃষ্টিভঙ্গির সাথে আন্তরিকভাবে একমত: "সুপার" ব্যক্তিগত হওয়া উচিত। আমি তার উত্তর দুটি বার upvote হবে, কিন্তু আমি অনুমান করতে পারি না।
super
দেখতে দেখতে Java
এটি খারাপ কিছু নয়, তবে ... তবে C++
একাধিক উত্তরাধিকারকে সমর্থন করে।
MyFirstBase<MyString, MyStruct<MyData, MyValue>>
সব জায়গায় লেখার জন্য )
template <class baz> struct Foo {...void bar() {...} ...}; struct Foo2: Foo<AnnoyinglyLongListOfArguments> { void bar2() { ... Foo::bar(); ...} };
এটি gcc 9.1 --std = c ++ 1y (c ++ 14) দিয়ে আমার সাথে কাজ করেছে।