Bestimmen der Typvollständigkeit mit einer benutzerdefinierten Vorlage
Unvollständige Typen spielen, obwohl sie nicht vollständig definiert sind, eine entscheidende Rolle in der C-Programmierung. Es kann jedoch eine Herausforderung sein, festzustellen, ob ein Typ vollständig ist, insbesondere da es keine spezielle Vorlage wie is_complete von Boost gibt.
Vorgeschlagene Lösung
Obwohl eine universelle Lösung, die vollständig ist Die Einhaltung der One Definition Rule (ODR) mag schwer fassbar sein, ein plattformspezifischer Ansatz hat sich für Microsoft Visual C als effektiv erwiesen. Wie von Alexey Malistov beschrieben, kann die folgende Vorlage verwendet werden:
<code class="cpp">namespace { template<class T, int discriminator> struct is_complete { static T & getT(); static char (& pass(T))[2]; static char pass(...); static const bool value = sizeof(pass(getT()))==2; }; }</code>
Verwendung
Um diese Vorlage zu nutzen, verwenden Sie einfach das Makro IS_COMPLETE(X), wobei X ist der betreffende Typ. Zum Beispiel:
<code class="cpp">#define IS_COMPLETE(X) is_complete<X,__COUNTER__>::value</code>
Vorbehalt
Es ist wichtig zu beachten, dass das Makro __COUNTER__ nicht Teil des C-Standards ist. Daher ist diese Lösung möglicherweise nicht für alle Compiler geeignet.
Das obige ist der detaillierte Inhalt vonWie ermittelt man die Typvollständigkeit in C ohne eine universelle Vorlage?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!