Zugriff von Template-Oberklasse auf Elemente abgeleiteter Klasse



  • Hi,

    gibt's irgendeine Möglichkeit, von Foo<Conc> auf das Enum "Whatever" von Conc zuzugreifen?

    template<class T> class Foo
    {
    	// Compiler-Fehler: "Whatever ist kein Element von Conc"
    	typedef typename T::Whatever Whatever;
    };
    
    class Conc : public Foo<Conc>
    {
    	friend class Foo<Conc>;
    
    	protected:
    		enum Whatever
    		{
    			WHATEVER
    		};
    };
    


  • der compiler kennt beim paresen deiner basisklasse die abgleitete klasse noch nicht und kann daher den Typ WHATEVER nicht auflösen.
    Bin grad nicht sicer aber evtl. kann eine Vorwärstdeklaretion Abhilfe schaffen.



  • muffmolch schrieb:

    Bin grad nicht sicer aber evtl. kann eine Vorwärstdeklaretion Abhilfe schaffen.

    Hm, enums kann man leider nicht vorwärts-deklarieren (abgesehen davon, dass ich gar nicht wüsste, wie ich Klassen-Inhalt vorwärts-deklarieren könnte) 😕



  • stimmt, enums kann man nicht vorwärts deklarieren.
    generell stllt sich hier die frage, ob das design so korrekt ist oder ob dich nicht eine template klasse verwenden solltest, die ein type-trait erwartet, dass koennte das problem ebenfalls lösen



  • Stimmt, die Idee mit den Type-Traits ist nicht schlecht! Und das Design ist auch noch nicht ausgereift, ich spiele nur grad ein wenig herum und gucke, wie's mir am Besten gefällt.
    Danke für die Ideen 🙂


Anmelden zum Antworten