Maison  >  Article  >  développement back-end  >  Les littéraux de chaîne peuvent-ils être utilisés comme paramètres de modèle non-type en C ?

Les littéraux de chaîne peuvent-ils être utilisés comme paramètres de modèle non-type en C ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-17 06:03:03214parcourir

Can String Literals Be Used as Non-Type Template Parameters in C  ?

Modèles de classe avec des littéraux de chaîne non-type

En C, vous pouvez rencontrer le besoin de déclarer des modèles de classe avec des paramètres non-type, tels que les chaînes littérales. Cette requête explore la faisabilité de cette approche et fournit une solution.

Justification des paramètres de modèle non-type

Vous souhaiterez peut-être utiliser des littéraux de chaîne directement comme modèle non-type paramètres pour des raisons de commodité ou de lisibilité. Cependant, cela n'est pas directement pris en charge en C.

Une solution de contournement réalisable

Bien que passer directement une chaîne littérale ne soit pas possible, une solution de contournement implique l'utilisation d'un const char* non -type paramètre de modèle et en lui passant une variable const char[] avec liaison statique. Cette méthode équivaut presque à transmettre une chaîne littérale.

Exemple d'implémentation

Le code suivant illustre cette solution de contournement :

#include <iostream>    

template<const char *str> 
struct cts {
    void p() {std::cout << str;}
};

static const char teststr[] = "Hello world!";
int main() {
    cts<teststr> o;
    o.p();
}

Explication

  • Le modèle de classe cts est défini avec un caractère const* paramètre de modèle non-type str.
  • Une variable const char[] liée statiquement nommée teststr est déclarée et initialisée avec la chaîne littérale "Hello world!".
  • Dans la fonction principale, une instance de cts est créé en utilisant teststr comme argument de modèle.
  • La fonction membre p() de l'objet cts imprime la chaîne stockée dans str.

Conclusion

Cette solution de contournement vous permet d'utiliser efficacement des littéraux de chaîne dans les modèles de classe en tant que paramètres non-type. Il fournit une solution alternative lorsque la saisie directe d'une chaîne littérale n'est pas réalisable.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn