Maison > développement back-end > C++ > Comment déclarer correctement les constructeurs de modèles de classe en C 20 ?

Comment déclarer correctement les constructeurs de modèles de classe en C 20 ?

Patricia Arquette
Libérer: 2024-11-25 18:00:19
original
1016 Les gens l'ont consulté

How to Correctly Declare Class Template Constructors in C  20?

Surmonter les paramètres de modèle redondants dans les constructeurs de modèles de classe en C 20

En C 20, la déclaration des constructeurs de modèles de classe a subi une modification subtile mais changement impactant. Auparavant, les constructeurs de modèles de classe pouvaient éventuellement inclure la liste de paramètres de modèle dans leur déclarateur, comme le montre l'extrait de code suivant :

1

2

3

4

template<typename T>

struct S {

    S<T>();

};

Copier après la connexion

Cette pratique, cependant, est désormais obsolète en C 20. Le code ci-dessus entraîne maintenant une erreur du compilateur dans le tronc gcc avec -std=c 20. Cependant, il serait toujours compilé dans le tronc clang avec le même standard.

Justification du changement

La suppression des paramètres de modèle redondants dans les constructeurs de modèles de classe résout une source potentielle d'erreurs. En exigeant l'utilisation explicite du nom de classe injecté, l'intention simple est préservée lors de la déclaration des constructeurs dans les modèles de classe.

Effet sur le code existant

Ce changement peut avoir implications pour les bases de code existantes qui s'appuient sur la syntaxe précédemment valide. Le code C 2017 valide comme l'exemple ci-dessus peut ne plus être compilé selon la norme C 20.

Résolution du code concerné

Pour tenir compte de ce changement, la syntaxe alternative suivante peut être utilisé :

1

2

3

4

template<typename T>

struct S {

    S();  // Constructor declaration using the injected class name

};

Copier après la connexion

Alternativement, si des arguments de modèle spécifiques sont requis, la surcharge du constructeur peut être employé :

1

2

3

4

5

template<typename T>

struct S {

    S<T>();  // Constructor declaration with explicit template arguments

    S<int>();  // Overload for specific template argument

};

Copier après la connexion

En adhérant à ces directives de syntaxe, les bases de code peuvent maintenir la compatibilité avec la norme C 20 mise à jour.

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