Est-il possible en C ++ moderne de transmettre un littéral de chaîne en tant que paramètre à un modèle C ++?

Est-il possible dans “C ++ moderne” (C ++ 17 ou supérieur) de passer un littéral de chaîne en tant que paramètre à un modèle C ++?

Je me rends compte que vous pouvez le faire avec l’argument du constructeur; Je pensais juste qu’il serait plus pratique de l’avoir comme argument de modèle, plutôt que de l’enfouir profondément dans le fichier cpp. J’étais curieux de savoir si c’était peut-être une nouvelle fonctionnalité du C ++ moderne. Voir Pseudo code ci-dessous de ce que j’essaie de faire:

Exemple de pseudo-code:

// Header File ///////////////////////// template class ModuleBase { public: ModuleBase(); ssortingng name; }; class xyz : ModuleBase { public: xyz(); }; // Cpp File ////////////////////////// template ModuleBase::ModuleBase() { name = Name; } xyz::xyz() : ModuleBase() { } 

    Oui, en c ++ 20 .

    Le problème était que la détermination de l’unicité d’un argument de type non modèle était difficile.

    c ++ 20 ajoute une comparaison d’opérateur de vaisseau spatial <=> . S’il est non fourni par l’utilisateur (et basé uniquement sur les non-utilisateurs <=> à tour de rôle, répétez de manière récursive) (et quelques autres exigences, voir p0732 ), le type peut être utilisé comme argument de type non-type.

    De tels types peuvent être construits à partir de "ssortingngs" constexpr dans les constructeurs constexpr , y compris en utilisant des guides de déduction c ++ 17 pour les rendre eux-mêmes auto-dimensionnés.

    Comme la taille des données stockées va probablement faire partie du type, vous devez prendre le type en tant que paramètre non typé auto typé ou type auto-déduit.


    Notez que placer l’implémentation de votre modèle dans un fichier cpp est généralement une mauvaise idée. Mais c’est une autre question.