Verwenden von "super" in C ++

Mein Codierungsstil beinhaltet die folgende Redewendung:

class Derived : public Base
{
   public :
      typedef Base super; // note that it could be hidden in
                          // protected/private section, instead

      // Etc.
} ;

Dies ermöglicht mir, "super" als Alias ​​für Base zu verwenden, zum Beispiel in Konstruktoren:

Derived(int i, int j)
   : super(i), J(j)
{
}

Oder sogar beim Aufrufen der Methode aus der Basisklasse in ihrer überschriebenen Version:

void Derived::foo()
{
   super::foo() ;

   // ... And then, do something else
}

Es kann sogar verkettet werden (ich muss jedoch noch die Verwendung dafür finden):

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
}

Jedenfalls finde ich die Verwendung von "typedef super" sehr nützlich, zum Beispiel, wenn Base entweder ausführlich und / oder als Vorlage vorliegt.

Tatsache ist, dass super sowohl in Java als auch in C # implementiert ist (wo es "base" heißt, sofern ich mich nicht irre). In C ++ fehlt dieses Schlüsselwort.

Also meine Fragen:

ist diese verwendung von typedef super verbreitet / selten / noch nie in dem code gesehen, mit dem du arbeitest?ist diese Verwendung von typedef super ok (d. h. siehst du starke oder nicht so starke Gründe, es nicht zu verwenden)?sollte "super" eine gute sache sein, sollte es in c ++ etwas standardisiert sein, oder reicht diese verwendung durch ein typedef schon aus?

Bearbeiten: Roddy erwähnte die Tatsache, dass der Typedef privat sein sollte. Dies würde bedeuten, dass eine abgeleitete Klasse sie nicht verwenden kann, ohne sie erneut zu deklarieren. Aber ich denke, es würde auch die Super-Super-Verkettung verhindern (aber wer wird dafür weinen?).

Bearbeiten 2: Jetzt, einige Monate nachdem ich massiv "super" benutzt habe, stimme ich Roddys Ansicht voll und ganz zu: "super" sollte privat sein. Ich würde seine Antwort zweimal positiv bewerten, aber ich denke, ich kann nicht.

Antworten auf die Frage(17)

Ihre Antwort auf die Frage