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

Langage C++ Discussion :

mot clef Generic et Ref


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 85
    Par défaut mot clef Generic et Ref
    Voici un autre toy code

    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
    22
    23
    24
    25
    26
     
     
    struct A{ 
    	int F (){ return 1; } 
    };
     
    template<bool ,class> struct enable_if{};
    template<class T> struct enable_if<true,T>{typedef T type;};
     
    template< class T,int n=3> 
    struct H{
    	template<int m>
    	int h () 
    	{
    		typedef typename enable_if< m<=n ,H>::type check_type;
    		T a; return a.F();
       }
    };
     
    int main()
    {
    	H<A > u_a;
    	int t = u_a.h<1>();
     	//t = u_a.h<6>();
    	return 0;
    }
    Grace a ce que vous m'avez appris je permet un erreur de compilation si m> n ( ligne en commentaire).
    Cependant si j essoie de rentrer la definition de enable à l interieur de la fonction h:

    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
     
    struct A{ 
    	int F (){ return 1; } 
    };
     
    template< class T,int n=3> 
    struct H{
    	template<int m>
    	int h () 
    	{
    		template<bool ,class> struct enable_if{};
    		template<class T> struct enable_if<true,T>{typedef T type;};
    		typedef typename enable_if< m<=n ,H>::type check_type;
    		T a; return a.F();
       }
    };

    Ca provoque une erreur C2951. J ai appiqué ce qui est recommandé par le message d erreur mais ca ne marche pas mieux!

    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
     
    struct A{ 
    	int F (){ return 1; } 
    };
     
    template< class T,int n=3> 
    struct H{
    	template<int m>
    	int h () 
    	{
    		generic<bool ,class> ref struct enable_if{};
    		generic<class T> ref struct enable_if<true,T>{typedef T type;};
    		typedef typename enable_if< m<=n ,H>::type check_type;
    		T a; return a.F();
       }
    };
    Je dois certainement mal m y prendre n est ce pas?

  2. #2
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Tu définis souvent des structures (qui plus est templates) (et qui plus est, qui sont indépendantes en fait, et qui sont faites pour être réutilisées !) à l'intérieur de la définition de tes fonctions ?

    Quoiqu'il arrive, ce que tu essayes de faire n'est pas une bonne pratique, et même si je n'ai pas la norme sous les yeux, je pense que c'est le genre de situation qui peut poser des problèmes.

    Pourquoi veux-tu absolument mettre cela dans ta fonction h ?

  3. #3
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    En tout les cas le mot clef généric ça existe pas en C++ :p. Et sinon +1 avec alp, pour vouloir faire une struct in class alors que c'est un composant réutilisable?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 85
    Par défaut
    voici le message qui m a interpelé:
    http://msdn.microsoft.com/en-us/libr...ed(VS.80).aspx

    et par curiosite je cherche àsavoir le sens des ces 2 mots

    J ai pas beasoin de rentrer les 2 ligne de enable_if dans le h mais je voulais juste voir si c etait possible.

    Le but c est d empecher des instantiations de type h<6>

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 85
    Par défaut
    ah oui le fait de le definir dans la fonction h c ets pour pouvoir faire une macro. C est pas orthodoxe? mais qui définit le dogme?

  6. #6
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par Math75 Voir le message
    mais qui définit le dogme?
    Le comité de normalisation
    Mais qu'est ce que c'est que cette obsession des macros ?

Discussions similaires

  1. [MySQL] SQL et résultat de recherche par mot clef
    Par carelha dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 18/04/2006, 15h40
  2. Réponses: 1
    Dernier message: 11/03/2006, 09h55
  3. mot-clef static
    Par keil dans le forum C++
    Réponses: 8
    Dernier message: 25/01/2006, 17h11
  4. mot clef sql pour nom de champ
    Par bobinou007 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 12/10/2004, 13h21

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