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).


Anmelden zum Antworten