template using problem
-
hallo
ich möchte folgendes irgendwie zum laufen bekommen:
struct Base { typedef int Type; // ... }; template<typename Base, typename Inner = typename Base::Type> struct Derived : public Base { // ... private: using Base::Inner; };gibt es irgend eine art zu sagen, dass der typ "Inner" aus "Base" gemeint ist?
ich hoffe, ihr versteht was ungefähr gemeint ist.
gruss.
ps.: nein, ich kann keine private vererbung und auch keine member instanz von Base machen...
pps.: bitte keine makros...
-
Ich bin mir jetzt nicht sicher ob ich das richtig verstanden habe, aber meinst du das so?
struct Base { typedef int Type; // ... }; template<typename Base, typename Inner = ::Base::Type> struct Derived : public Base { // ... private: //using Base::Inner; Inner myInnerData; };--Daniel
-
nein, nicht ganz. ich möchte den typen verstecken indem ich ihn in den priate bereich verschiebe. welcher typ in Base drin es ist, muss aber mit dem template argument steuerbar sein.
-
aasdf schrieb:
ich möchte den typen verstecken indem ich ihn in den priate bereich verschiebe.
Gut, ich versuchs nochmal.
struct Base { typedef int Type; // ... }; template<typename BaseT> struct Derived : public BaseT { // ... private: typedef typename BaseT::Type MyType; };So etwa?
-
nein. ein typedef versteckt den alten namen nicht sondern erstellt einfach einen neuen namen für den alten (natürlich kommen da noch cv-qualifier, pointer, referenzen usw. dazu). ausserdem ist der untertyp bei deinem listing nicht wählbar (was ja eigentlich das problem ist bei meinem ansatz mit dem privaten using).