Schönerer Ersatz für sizeof(*str.data()) (C++03)?



  • Aufgabe: Nur mit Hilfe einer Variable vom Typ std::basic_string<???, ???> rausbekommen wie gross ein Element ist.
    Meine (mMn. nicht sehr elegante) Lösung: sizeof(*str.data())

    Mit C++11 müsste ja - schätze ich - sizeof(decltype(str)::value_type) verwenden können. Was zwar länger aber mMn. auch viel aussagekräftiger ist.

    Geht das mit C++03 auch irgendwie "schöner"?

    ps: Die Lösung soll "in place" sein. Also kein (eigenes) Hilfs-Template o.ä. verwenden (fertige Sachen in std:: oder boost:: sind natürlich OK).



  • Ich hätte einfach

    sizeof(str[0])
    

    gemacht.



  • Was passiert denn eigentlich in beiden Fällen, wenn der String leer ist?



  • Der Ausdruck wird nicht zur Laufzeit ausgewertet, es ist nur der Typ relevant. Dort könnte auch ein sizeof(str[42]) stehen.



  • underkill schrieb:

    Ich hätte einfach

    sizeof(str[0])
    

    gemacht.

    Hatte ich auch erst stehen.
    Dann ist mir vector<bool> eingefallen*.
    Und dann hab ich eben sizeof(*str.data()) geschrieben.

    *: Ich weiss schon dass es dieses Problem bei basic_string nicht gibt sondern nur bei vector . Trotzdem hatte ich danach keine Lust mehr str[0] zu verwenden 🙂



  • Darf man cheaten? gcc hatte irgendwann mal eine typeof() -Extension. 😉



  • Nein, man darf nicht cheaten 🙂


Log in to reply