Détermination de l'exhaustivité d'un type avec un modèle personnalisé
Les types incomplets, bien qu'ils ne soient pas entièrement définis, jouent un rôle crucial dans la programmation C. Cependant, déterminer si un type est complet peut être difficile, en particulier en l'absence d'un modèle dédié comme is_complete de Boost.
Solution proposée
Bien qu'il s'agisse d'une solution universelle qui pleinement adhère à la règle de définition unique (ODR) peut être insaisissable, une approche spécifique à la plate-forme s'est avérée efficace pour Microsoft Visual C. Comme indiqué par Alexey Malistov, le modèle suivant peut être utilisé :
<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>
Utilisation
Pour exploiter ce modèle, utilisez simplement la macro IS_COMPLETE(X), où X est le type en question. Par exemple :
<code class="cpp">#define IS_COMPLETE(X) is_complete<X,__COUNTER__>::value</code>
Mise en garde
Il est crucial de noter que la macro __COUNTER__ ne fait pas partie du standard C. Par conséquent, cette solution peut ne pas convenir à tous les compilateurs.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!