c++ string initialisieren


  • Mod

    Arcoth schrieb:

    char const arr[] = "\x11\x0C\x35\x00\x00\x00\x01";
    string str(arr, sizeof(arr));
    

    Ja, das ist schon besser und besser als viele anderen C++98-Lösungen. An diesen Konstruktor hatte ich gar nicht gedacht (vermutlich, weil vector<char> so etwas nicht kann 🙂 ).



  • Ich hab mir vor langer langer Zeit mal Makros MY_ARRAY_BEGIN(a) und MY_ARRAY_END(a) gemacht die man hier schön verwenden könnte.

    std::string str(MY_ARRAY_BEGIN(arr), MY_ARRAY_END(arr));
    

    Das geht dann auch mit std::vector . Und auch mit wchar_t (bzw. allgemein beliebigen Typen).

    (Und die heissen natürlich nicht wirklich "MY_xxx" - statt "MY" steht da der Name unserer "das kann man überall brauchen" Library.)



  • hustbaer schrieb:

    (Und die heissen natürlich nicht wirklich "MY_xxx" - statt "MY" steht da der Name unserer "das kann man überall brauchen" Library.)

    Also bei mir heißen die MY_ und alles andere ist auch im namespace my.
    Finde ich persönlich jetzt sehr kreativ.



  • Wenn du das Zeug "MY" nennst, dann kannst du den Prefix/Namespace auch gleich weglassen, nen?



  • hustbaer schrieb:

    Wenn du das Zeug "MY" nennst, dann kannst du den Prefix/Namespace auch gleich weglassen, nen?

    Dat Makros.



  • Hä?
    Ich meine "my" ist ein verdammt schlechter Namespace-Name bzw. auch ein verdammt schlechter Prefix für Makros.
    Weil du vermutlich nicht der einzige bist der auf die Idee kommt "my" zu verwenden. Weil's halt nicht so doll einzigartig ist.

    => Sinnlos

    Aber das driftet schon wieder ziemlich weit OT...


  • Mod

    Wieso überhaupt ein Makro?



  • hustbaer schrieb:

    Hä?
    Ich meine "my" ist ein verdammt schlechter Namespace-Name bzw. auch ein verdammt schlechter Prefix für Makros.
    Weil du vermutlich nicht der einzige bist der auf die Idee kommt "my" zu verwenden. Weil's halt nicht so doll einzigartig ist.

    => Sinnlos

    Aber das driftet schon wieder ziemlich weit OT...

    Ich benutze das Prefix MY_ für Makros und alles andere ist im Namespace my.
    Leute, die ihre Bibliotheken my nennen, werden sie wohl kaum veröffentlichen, also krieg ich von da keine Konflikte.
    Und um etwas gegen das OT zu tun:
    Deine Array-Begin/End-Makros: Kein C++11 Support?



  • @Arcoth
    Ein Makro, weil nicht-Makro Lösungen alle diverse Probleme haben.
    Mir hängt da ein verschwommener Informationsfetzen im Hinterkopf rum - ich meine man kann Templates nicht auf Dinge mit "no linkage" spezialisieren. Also sowas:

    typedef struct /* here be dragons, but no name */
    {
       int foo;
    } FOO;
    
    FOO g_array[123];
    
    ...
    
        MY_ARRAY_BEGIN(g_array), MY_ARRAY_END(g_array)
    

    Und das geht dann nicht mit Template-Funktionen. Mit Makros geht es.

    @Nathan
    Richtig, kein C++11 Support.
    Im Beitrag von SeppJ, auf den ich geantwortet habe, war ja auch die Rede von "C++98-Lösungen".
    Und was das "my" angeht - ja, das geht so lange gut, bis du doch mal Code mit irgendjemandem Teilst der selbst auch das "my" Prefix verwendet. Also entweder du gibst ihm Code oder er dir oder ihr macht was zusammen - was auch immer. Und wie gesagt: wozu dann überhaupt irgend ein Prefix?


  • Mod

    ich meine man kann Templates nicht auf Dinge mit "no linkage" spezialisieren.

    Wie meinst du das?

    Und das geht dann nicht mit Template-Funktionen.

    typedef struct
    {
       int foo;
    } FOO;
    
    FOO g_array[123];
    
    int main()
    {
    	std::begin(g_array);
    }
    

    kompiliert.

    Ein Makro, weil nicht-Makro Lösungen alle diverse Probleme haben.

    Diverse? Was denn für welche?


Anmelden zum Antworten