member templates



  • mit fällt keine vernüftige umschreibung für mein problem ein deswegen
    poste ich mal triviales beispiel, aber so in etwa hätte ich mir gedacht
    das es eigentlich funktionieren würde. ist mein ansatz den so falsch?

    struct Foo
    {
    	template<
    		typename T_>
    	void f(){ }
    };
    
    template<
    	typename T_>
    class Bar
    {
    	public:
    		template<
    		    typename U_>
    		void b(){ t.f<U_>(); }
    
    	private:
    		T_  t;
    };
    
    int main(int argc, char** argv)
    {
    	Bar<Foo>    t;
    
    	t.b<float>();
    
        return 0;
    }
    

    compilierlog

    main.cpp: In member function `void Bar<T_>::b()':
    main.cpp:16: error: expected primary-expression before '>' token
    main.cpp:16: error: expected primary-expression before ')' token
    

    hintergrund ist der das ich einen texturemanager habe (bar) der eine factory enthält und zu dem neue typen registrieren wollte ( Bar::b() )

    template<
        class DerivedBaseImage_>
    bool RegisterImgType(const char *pszExt)
    {
        return m_ImgFactory.Register<DerivedBaseImage_>(pszExt);
    }
    
    TextureManager<Image>    TexMan;
    TexMan.RegisterImgType<Bitmap>("bmp");
    


  • Hallo,
    es fehlt ein template zur Auflösung der Mehrdeutigkeit von t.f<U_>()
    Richtig:

    template<
                typename U_>
            void b(){ t.template f<U_>(); }
    

    t ist ein abhängiger Name. Deshalb wird t.f als Attribut interpretiert. Und damit t.f < U_ als Kleiner-als-Ausdruck.

    Durch die Qualifikation mit template teilst du dem Compiler mit, dass f in diesem Kontext ein Membertemplate und kein Attribut ist.



  • dank dir.

    HumeSikkins schrieb:

    es fehlt ein template zur Auflösung der Mehrdeutigkeit von t.f<U_>()
    t ist ein abhängiger Name. Deshalb wird t.f als Attribut interpretiert. Und damit t.f < U_ als Kleiner-als-Ausdruck.

    wie kommt er auf diese mehrdeutigkeit? abhängiger name?
    das verstehe ich noch nicht ganz.

    irgendwelche einwände gegen das design?



  • hat sich erledigt, beim heimfahren ist es mir klar geworden.


Log in to reply