Maison >développement back-end >C++ >Comment puis-je utiliser des chaînes littérales comme arguments de modèle non-type en C ?

Comment puis-je utiliser des chaînes littérales comme arguments de modèle non-type en C ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-29 15:14:14871parcourir

How can I use string literals as non-type template arguments in C  ?

Passer des littéraux de chaîne en tant qu'arguments de modèle non-type

Dans le domaine des modèles C, déclarer un modèle de classe qui accepte un littéral de chaîne comme un paramètre de modèle non-type peut être une tâche déroutante. De nombreux programmeurs souhaitent pouvoir spécifier une chaîne littérale directement dans une déclaration de modèle, telle que my_class<"string">.

Pour répondre à ce besoin, bien que C n'autorise pas directement le passage de chaînes littérales comme non-type arguments, une solution utilisant des tableaux de caractères const peut être utilisée. En définissant une variable const char[] liée statiquement et en la passant comme paramètre de modèle, nous obtenons un effet similaire à l'utilisation de chaînes littérales.

Voici un extrait de code compilable qui illustre cette approche :

#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();
}

Dans cet exemple, une variable const char[] liée statiquement nommée teststr est définie avec la valeur "Hello world!". En passant teststr comme paramètre de modèle non-type au modèle de classe cts, nous obtenons effectivement le comportement souhaité consistant à utiliser une chaîne littérale.

L'exécution de ce code produit le résultat suivant :

Hello world!

Cette technique fournit une solution de contournement au manque de prise en charge directe du passage de chaînes littérales comme arguments de modèle non-type en C , permettant aux programmeurs de définir des modèles de classe qui acceptent des valeurs de type chaîne de manière pratique. manière.

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