Maison > développement back-end > C++ > le corps du texte

Les chaînes de style C peuvent-elles être des arguments de modèle en C ?

Barbara Streisand
Libérer: 2024-10-30 03:07:29
original
740 Les gens l'ont consulté

  Can C-Style Strings Be Template Arguments in C  ?

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();
}
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal