IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

spécialisation de template avec aucun argument : se passer des <>


Sujet :

C++

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur du dimanche
    Inscrit en
    Février 2013
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur du dimanche

    Informations forums :
    Inscription : Février 2013
    Messages : 154
    Points : 105
    Points
    105
    Par défaut spécialisation de template avec aucun argument : se passer des <>
    Bonjour

    J'ai une template struct que je spécialise, dans le cas où aucun argument n'est passé en paramètre du template :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    template <typename...Ts>
    struct Struct 
    {   
        int a;
    };
     
    template <>
    struct Struct<>
    {
        int b;
    };
    Quand je déclare les différentes versions dans mon main, ça donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Struct<int,char> a;
    Struct<> b;
    Mais je ne trouve pas ça très beau, j'aimerais pouvoir écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Struct<int,char> a;
    Struct b;
    Je me disais qu'en passant par un alias je pourrais faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    template <typename...Ts>
    using TMP = Struct<Ts...>;
     
    using TMP = Struct<>;
    Mais en fait non X) Pas moyen non plus de faire la même chose en déclarant deux struct : l'une template et l'autre non. Pourtant, j'aimerais vraiment conserver le même nom ! Et je vais pas passer par une macro, quand même

    Quelqu'un aurait une solution ?

    Merci !
    "There should be no boundaries to human endeavor" - Hawking
    Retrouvez moi sur GitHub : https://github.com/JeanLouisMassei

  2. #2
    Membre chevronné Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Points : 2 160
    Points
    2 160
    Par défaut
    Bonjour

    Si j'ai bien compris (ma lecture en diagonale), ton code sera valide en C++17 (?) (déduction automatique des types template dans le constructeur) mais je n'ai pas vérifié.

    Sinon, en C++11, on passe généralement par une fonction. Ça change le coding style et dans ton cas c'est plus verbeux.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    // g++ -Wall -Wextra -Wconversion -Wsign-conversion -Ofast -std=c++11 -pedantic -fopenmp main.cpp -o main && ./main
     
    #include <iostream>
     
    template <class T = int>
    struct test_t
    { };
     
    template <class T = int, class ... args_t>
    test_t<T> make_test(args_t const & ... args)
    {
        return test_t<T>(args...);
    }
     
    int main()
    {
        test_t<> a;
        auto b = make_test();
     
        return 0;
    }
    J'ai écris la version avec un variadic template (avec une const &) mais ce n'est pas forcément utile et je n'ai pas testé...

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur du dimanche
    Inscrit en
    Février 2013
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur du dimanche

    Informations forums :
    Inscription : Février 2013
    Messages : 154
    Points : 105
    Points
    105
    Par défaut
    Yep, à peu près quelque chose comme ça

    Merci de ton aide !
    "There should be no boundaries to human endeavor" - Hawking
    Retrouvez moi sur GitHub : https://github.com/JeanLouisMassei

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 24/03/2011, 21h54
  2. Passer des argument avec le manifeste java
    Par hotward dans le forum Général Java
    Réponses: 3
    Dernier message: 09/09/2009, 06h23
  3. passer des arguments avec Runtime.getRuntime().exec;
    Par firgon dans le forum Débuter avec Java
    Réponses: 0
    Dernier message: 07/11/2008, 07h16
  4. Spécialisation de template parametre avec Enum
    Par 3DArchi dans le forum Langage
    Réponses: 4
    Dernier message: 24/09/2008, 15h21
  5. [Configuration] Impossible de passer des arguments avec require
    Par black is beautiful dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 06/10/2007, 21h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo