Template in einem Template definieren



  • Hallo!

    Kurz noch zur Überschrift. Hab' jetzt zu lange darüber nachgedacht, so dass ich nicht weiterkomme. Heißt es jetzt "Template in einem Template definieren" oder "Template in einem Template deklarieren" und werden Templates defniert oder dekariert?

    So nun zum Problem.
    Ich möchte wie in der Ü. schon erwähnt ein Template in einem Template de...
    So siehts aus:

    namespace EinNamespac
    {
        class klasse
        {
        private:
            NamespaceOne::mytemplate<NamespaceTwo::othertemplate<char*>> var;
        // Rest der Klasse
        };
    }
    

    Nun meckert mein Compiler dass er nicht weiß was ich möchte und sagt mir: "Error 1 error C2947: expecting '>' to terminate template-argument-list, found '>>' file.h 21".

    Für mich aber unverständlich. Sind solche Konstrukte denn nicht vorgesehen oder liegt das am Compiler, also VC++ 2005?

    Ich habe mich zwar nun einem "typedef" bedient aber irgendwie find ich das nicht so toll.
    Code sind dann wie folgt aus:

    namespace EinNamespac
    {
        typedef NamespaceTwo::othertemplate<char*> __stdstring;
        class klasse
        {
        private:
            NamespaceOne::mytemplate<__stdstring> var;
        // Rest der Klasse
        };
    }
    

    P.S.: Ich benutze zur Zeit Visual C++ 2005 BETA 2. Ich sitze an einem Rechner wo ich z.Zt. mein Visual C++ 6 nicht starten kann.



  • NamespaceOne::mytemplate<NamespaceTwo::othertemplate<char*> > var;
    

    Leerzeichen zwischen den beiden "größer" Zeichen wg. Verwechslung mit >> Operator (bitshift)



  • Hallo,
    du hast schlicht und einfach ein Leerzeichen vergessen:
    Das:

    NamespaceOne::mytemplate<NamespaceTwo::othertemplate<char*>> var;
    

    muss so aussehen:

    NamespaceOne::mytemplate<NamespaceTwo::othertemplate<char*> > var;
    

    Der Grund: Ein C++ Compiler baut Token nach der sogenannten "maximal munch"-Regel. D.h. er baut immer das längste Token das noch sinn ergibt.
    In deinem Fall wird deshalb >> als einzelnes Token interpretiert (rechts-shift-Operator) statt als zwei einzelne >.



  • Spitze. Dank an euch beide.
    Zum Glück sind Compiler keine Menschen. Die wären warscheinlich öfters mal fix und fertig. 😉



  • HaJo. schrieb:

    Spitze. Dank an euch beide.
    Zum Glück sind Compiler keine Menschen. Die wären warscheinlich öfters mal fix und fertig. 😉

    Da würde man glatt zu WettenDass... kommen wenn man es schafft von C++-Code im Kopf Binärcode zu erstellen 🙂

    Gruß


Anmelden zum Antworten