Wie am geschicktesten Strings verschiedener Typen vergleichen?



  • Hoi,
    Ich wollte dem Nutzer die Freiheit überlassen, welche Art Strings er aus einer Datei lesen möchte:

    template<typename CharType>
            Info<CharType> parse(......)
            {
                Info result;
    
                std::basic_ifstream<CharType> info(".....");
                while(info)
                {
                    Detail::InfoParser<CharType> parser;
                    while(info >> parser && parser.value.first != "abcdefgh")
    
                }
            }
    

    Das Problem liegt hierbei beim Vergleich mit dem string. Wenn der Nutzer zb char16_t möchte, dann klappt der Vergleich mit dem einfachen Stringliteral natürlich nicht.

    Was würdet ihr empfehlen? Das Ganze sollte möglichst elegant sein. 🙂

    Danke und Grüße,
    Ethon



  • Das klappt nie, wenn du dem Nutzer das Encoding freilassen möchtest.

    Ansonsten hast du seit C++11 die Möglichkeit, Strings mit der Initializer-List zu initialisieren. Vergleiche dann auf std::basic_string<CharType>{static_cast<CharType>('a'),static_cast<CharType>('b'),static_cast<CharType>('c'),...,static_cast<CharType>('h')} (die Punkte sind hier leider keine C++-Syntax)



  • Super Idee, da der String in jedem Fall nur aus einfachen alphabetischen Zeichen besteht, dh. a-zA-Z.
    Das sollte mit keiner mir bekannten Zeichencodierung knallen.


Anmelden zum Antworten