Chaînes de style C comme arguments de modèle
Dans le domaine de la programmation C, vous avez peut-être rencontré un dilemme : tenter d'employer du C- chaînes de style comme arguments de modèle. Cet article examine le problème et propose une solution de contournement potentielle.
L'extrait de code suivant illustre la tentative :
<code class="cpp">template <char *str> struct X { const char *GetString() const { return str; } }; int main() { X<"String"> x; cout << x.GetString(); }
Cependant, malgré l'absence d'erreurs de compilation dans la définition de la classe, l'instanciation donne un message d'erreur. Le problème réside dans la tentative d'utiliser une chaîne littérale comme argument de modèle, ce qui n'est pas pris en charge par le compilateur.
Une solution simple consiste à remplacer la chaîne littérale par un pointeur de caractère :
<code class="cpp">char global_string[] = "String"; template <char const *str> struct X { const char *GetString() const { return str; } }; int main() { X<global_string> x; cout << x.GetString(); }</code>
Ce code sera compilé et exécuté avec succès, vous permettant de récupérer la chaîne stockée à l'aide de la méthode GetString.
Notez qu'avec l'avènement du C 11, il est désormais possible d'utiliser des littéraux de chaîne comme arguments de modèle en utilisant des caractères paquets. Cependant, pour les compilateurs prenant en charge les versions C antérieures, la solution de contournement présentée ici reste une option viable.
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!