Verwenden Sie in der abgeleiteten Klasse typedef / using from templated base class

Beim Zugriff auf ausing Ich bin von einer Basisklasse mit einer Basisklasse mit Vorlagen auf ein Problem mit Ausführlichkeit gestoßen, wenn auch sonst nichts. In dem folgenden Code versucht die abgeleitete Klasse, das zu verwendenmy_type von seiner Basisklasse.

template <typename T>
class Base {
    public:
        using mytype = T;
};

template <typename T>
class Derived : public Base<T>{
    public:
        // using the base's mytype here
        static typename Base<T>::mytype func() { return 0;}
};

In der Praxis finde ich jedoch, dass dies sehr viele Charaktere sind, denn es scheint, als ob es einfacher sein sollte. Wenn die Basisklasse nicht als Vorlage diente, würde sie die nicht benötigen<T> oder den Typnamen (offensichtlich).

In meiner eigentlichen Ausgabe habe ich viele Klassen, die von der Basis stammen, und ich möchte dies, wenn möglich, vereinfachen. Was ich im Moment habe, ist wie das nächste Beispiel, in dem ich nur ein zusätzliches hinzufügeusing um den Typ von der Basisklasse zu bekommen, aber es fühlt sich wie eine zusätzliche Ebene an, die ich nicht brauchen sollte.

template <typename T>
class Derived : public Base<T>{
    public:
        using base_type = typename Base<T>::mytype;
        static base_type func() { return 0;}
};

Dies mag wie ein albernes Problem erscheinen, aber die Häufigkeit, mit der die Basisklasse auftrittmytype wird in den abgeleiteten Klassen verwendet, macht es im ersteren Fall ziemlich abscheulich. Ist da einRecht Weg, um die Typen aus der Template-Basis herauszuholen, die die Lesbarkeit aufrechterhält?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage