Gibt es eine Möglichkeit, so etwas in C ++ zu machen, scheint es, dass die Größe dort aus irgendeinem Grund nicht verwendet werden kann?
%Vor%Nein, das kann nicht gemacht werden, weil alle Makro-Erweiterungen (# ... Dinge) im Pre-Prozessor-Schritt durchgeführt werden, der nichts über die Typen des C ++ - Codes weiß und sogar nichts wissen muss über die Sprache! Es erweitert / prüft nur die # ... Dinge und nichts anderes!
Es gibt einige andere häufige Fehler, zum Beispiel:
%Vor%Sie können nur auf #if zugreifen und Dinge verwenden, die über Befehlszeilenoptionen für den Compiler oder über #define definiert sind.
Der Präprozessor arbeitet, ohne etwas über die Typen zu wissen, auch nicht den eingebauten.
Übrigens, Sie können die Überprüfung immer noch mit einer static_assert-ähnlichen Funktion durchführen (boost hat beispielsweise eine, C ++ 0X wird eine haben).
Bearbeiten: C99 und C ++ 0X haben auch WCHAR_MIN
und WCHAR_MAX
Makros in <stdint.h>
sizeof () ist eine Laufzeit Kompilierzeitfunktion. Sie können das nicht in einer Präprozessordirektive aufrufen. Ich glaube nicht, dass Sie die Größe von wchar_t während der Vorverarbeitung überprüfen können. (siehe Edit 2)
Bearbeiten: Wie in den Kommentaren erwähnt, wird sizeof () zur Zeit der Kompilierung berechnet. In C99 kann zur Laufzeit für Arrays verwendet werden .
Bearbeiten 2: Sie können zur Build-Zeit Asserts unter Verwendung der in diesem thread .
Ich habe einige Makros entwickelt, mit denen Sie sizeof innerhalb einer Makrobedingung effektiv verwenden können. Sie befinden sich in einer Header-Datei, die ich hier (MIT-Lizenz) hochgeladen habe.
Es wird Code wie folgt zulassen:
%Vor% Beachten Sie die Kommata in SIZEOF(unsigned, long, int)
.