Frage zu Templates und typedef



  • Hallo Zusammen,

    ich habe folgende Situation: Ein größeres Projekt, sehr viele Templates (auch template-Polymorphismus, etc). Jetzt habe ich einige Hauptklassen, die viele Template-Parameter brauchen. Da ich diese ungerne jedes mal hinschreiben möchte, würde ich gerne eine "Konfigurationsklasse" hernehmen. Ich habe mir das Ganze in etwa so vorgestellt:

    template <class _A, class _B> class Conf {
    protected:
      typedef _A A;
      typedef _B B;
    };
    
    template <class C> class M : protected C {
    using C::A;
    using C::B;
    public:
      void test() {
        A a;
        B b;
      };
    };
    

    Leider geht das so nicht, der Compiler kennt offenbar A, B in der Klasse M nicht und spuckt Fehlermeldungen aus, dass er einen ";" erwarten würde (aber keinen undeclared identifier).

    Was muss ich tun, damit das funktioniert? Gibt es eventuell schönere Lösungen, als ich mir das jetzt vorgestellt habe?

    Danke!
    Lucas



  • Da helfen ein paar "typename"'s aus der Patsche. 😉

    template <class _A, class _B> class Conf {
    protected:
      typedef _A A;
      typedef _B B;
    };
    
    template <class C> class M : protected C {
    typedef typename C::A A;
    typedef typename C::B B;
    public:
      void test() {
         A a;
         B b;
      };
    };
    


  • Hm, okay, klar 😃

    Irgendwie auch nicht ganz schön, am liebsten wärs mir, wenn ich in der unteren Klasse gar nichts mehr schreiben müsste... Naja, wird dann wohl ein Preprocessor-Makro.



  • ich glaube nicht, dass man das typedef braucht... : P

    template <typename T, typename U>
    class Conf
    {
    protected:
    	typedef T A;
    	typedef U B;
    }; 
    
    template <typename C>
    class M : protected C
    {
    public:
    	void test()
    	{
    		A a; 
    		B b; 
    	}; 
    };
    
    int main()
    {
    	M< Conf<int, int> > m;
    	m.test();
    }
    

    kompiliert zumindest der msvc anstandslos - wär mir auch neu, wenn das nicht gehen sollte^^

    bb


  • Mod

    unskilled schrieb:

    wär mir auch neu, wenn das nicht gehen sollte^^

    Dann kannst du noch was lernen.
    Abhängige Basisklassen werden beim unqualifizierten Lookup nicht durchsucht.


Anmelden zum Antworten