Template-Konstruktor: Wie legt man eine Instanz dieser Klasse an?



  • Hi,

    wie legt man eine Instanz dieser Klasse an?

    class Test
    {
    public:
    	template <class T> Test()
    	{
    	}
    };
    


  • Hallo,
    gar nicht.
    Die Template-Parameter eines Template-Konstruktors müssen in der Parameterliste des Konstruktors auftauchen.



  • sprich du mußt das so machen

    template <class T> class Test
    {
    public: 
          Test(){};
    }
    

    und rufst das so auf :

    Test<int> bla();
    


  • Dann isses aber plötzlich ein Klassentemplate, sollte aber eine normale Klasse sein.



  • Dann hätte man aber eine Templateklasse.

    Ein Workaround wäre so:

    template<class T> struct Type{};
    
    class Test 
    { 
    public: 
        template<class T>
        Test(Type<T>)
        {
        } 
    };
    
    Test t(Type<int>());
    

    Soweit ich mich erinnere hatte der gcc 2.95 da aber einen Bug.

    Oder hab ich jetzt wieder was falsch gemacht? Grade nochmal mit dem gcc 3.3.2 probiert und es funktioniert wieder nicht (Konstruktor wird irgendwie garnicht aufgerufen).



  • Test t(Type<int>());
    

    Deklariert eine Funktion t, die Test zurückgibt, und als Parameter eine Funktion ohne Parameter, die Type<int> zurückgibt, annimmt. Tja, C++ Sprache -- idio^Wschwere Sprache 😉



  • Tja, C++ Sprache -- idio^Wschwere Sprache

    Zwei extra Klammern machen die idiotische Sprache wieder gefühgig:

    Test t((Type<int>()));
    

    Mal pragmatisch gefragt: Wozu braucht man einen solchen Template-Ctor?


Log in to reply