Utilisation de chaînes de style C comme arguments de modèle
En C, les arguments de modèle fournissent un moyen de spécifier des types ou des valeurs pour des fonctions ou des classes génériques . Cependant, les chaînes de style C ne peuvent pas être directement utilisées comme arguments de modèle.
En effet, les chaînes de style C sont des tableaux de caractères avec un terminateur nul. Lorsqu'ils sont utilisés comme arguments de modèle, ils nécessitent une syntaxe spéciale pour spécifier la longueur de la chaîne. De plus, le compilateur ne peut pas effectuer de vérification de type sur les chaînes de style C, ce qui le rend sujet aux erreurs.
Une solution consiste à utiliser une classe wrapper qui accepte une chaîne de style C et fournit une interface pour interagir avec la chaîne. . Par exemple :
<code class="C++">template <class StringType> struct StringWrapper { StringType str; StringWrapper(StringType s) : str(s) {} // Methods for accessing and manipulating the string ... };</code>
Cette classe wrapper peut ensuite être utilisée comme argument de modèle :
<code class="C++">template <class T> struct X { StringWrapper<T> str; // Methods for accessing and manipulating the string ... };</code>
Alternativement, on peut utiliser un type const char * comme argument de modèle et passer un Chaîne de style C comme argument :
<code class="C++">template <const char *str> struct X { const char *GetString() const { return str; } }; int main() { X<"String"> x; cout << x.GetString(); }
À partir de C 11, on peut utiliser des packs de caractères comme arguments de modèle, qui peuvent être utilisés pour transmettre des littéraux de chaîne comme arguments :
<code class="C++">template <char... c> struct X { // Methods for accessing and manipulating the string ... }; int main() { X<'S', 't', 'r', 'i', 'n', 'g'> x; // ... }</code>
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!