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::
oderboost::
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 mirvector<bool>
eingefallen*.
Und dann hab ich ebensizeof(*str.data())
geschrieben.*: Ich weiss schon dass es dieses Problem bei
basic_string
nicht gibt sondern nur beivector
. Trotzdem hatte ich danach keine Lust mehrstr[0]
zu verwenden
-
Darf man cheaten? gcc hatte irgendwann mal eine
typeof()
-Extension.
-
Nein, man darf nicht cheaten