Heim  >  Artikel  >  Backend-Entwicklung  >  Wie ermittelt man die Typvollständigkeit in C ohne eine universelle Vorlage?

Wie ermittelt man die Typvollständigkeit in C ohne eine universelle Vorlage?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-30 17:15:03426Durchsuche

 How to Determine Type Completeness in C   without a Universal Template?

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 &amp; getT();   
      static char (&amp; 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn