私のコーディング スタイルには、次のイディオムが含まれます。
class Derived : public Base
{
public :
typedef Base super; // note that it could be hidden in
// protected/private section, instead
// Etc.
} ;
これにより、たとえばコンストラクターで「super」を Base のエイリアスとして使用できます。
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
}
とにかく、「typedef super」の使用は非常に便利です。たとえば、Base が冗長であったり、テンプレート化されている場合などです。
実際のところ、super は C# だけでなく Java にも実装されています (私が間違っていない限り、"base" と呼ばれています)。しかし、C++ にはこのキーワードがありません。
だから、私の質問:
- このtypedefの使用は、使用するコードで非常に一般的/まれ/決して見られませんか?
- この typedef super の使用は OK ですか?
- 「スーパー」は良いことなのか、C++である程度標準化されるべきなのか、それともtypedefを介したこの使用はすでに十分なのか?
編集: Roddy は、typedef は非公開にする必要があるという事実に言及しました。これは、派生クラスがそれを再宣言しないと使用できないことを意味します。しかし、それはまた、super::super 連鎖を防ぐことになると思います (しかし、誰が泣くのでしょうか?)。
編集 2: "super" を大量に使用してから数か月が経ちましたが、Roddy の見解に心から同意します。「super」はプライベートであるべきです。私は彼の答えに2回賛成しますが、できないと思います。