FAQ - Dezimal in Binär - Was passiert genau aus Sicht des Compilers?



  • Hallo an alle,

    ich habe unter den FAQ eine Lösung für mein Problem in diesem Forum gefunden.
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-39490.html
    Leider verstehe ich den Code nicht.

    template <unsigned int NrOfBits>
    string DezToBin(int Wert)
    {
        bitset<NrOfBits> AlsBits(Wert);
        return AlsBits.template to_string<
          string::value_type, string::traits_type, string::allocator_type
        >();
    }
    

    Die letzte Zeile verstehe ich überhaupt nicht.

    Was passiert hier?

    AlsBits.template
    

    und wie kann ich diesen Code verstehen?

    to_string< string::value_type, string::traits_type, string::allocator_type >();
    

    Danke und Gruß
    Markus



  • Deine Frage kann ich leider nicht beantworten aber es gibt noch das http://www.cplusplus.com/reference/clibrary/cstdlib/itoa/



  • to_string wandelt das Bitset in einen basic_string um und dieser braucht die ganzen Parameter. So wie das da steht wird quasi ein std::string zurückgegeben. Warum man da jetzt allerdings template davor schreiben muß weiß ich jetzt auch nicht.


  • Mod

    Was passiert hier?

    AlsBits.template
    

    template kann/muss an manchen Stellen geschrieben werden um deutlich zu machen, dass der folgende Ausdruck eine Templateinstanzierung ist. Das ist so ähnlich wie, dass man manchmal typename explizit vor Typennamen schreiben muss.
    edit: Da es sich im Prinzip um genau die gleichen Gründe handelt, warum man manchmal typename schreiben muss, verweise ich an dieser Stelle auf Artikel zu diesem Thema. Diese sollten wesentlich leichter zu finden sein als zum Thema template als Disambiguator.

    und wie kann ich diesen Code verstehen?

    to_string< string::value_type, string::traits_type, string::allocator_type >();
    

    Und dies ist besagter Templateausdruck. to_string ist ein ganz normaler Member von bitset, den du in jeder Referenz nachlesen kannst, ebenso die benutzten typedefs aus std::string.


Anmelden zum Antworten