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 :

Génération de code par templates [ G++ ]


Sujet :

C++

  1. #1
    Membre éprouvé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Points : 1 054
    Points
    1 054
    Par défaut Génération de code par templates [ G++ ]
    Bonjour,

    Cela fait un petit moment que je n'ai plus touché au C++, et je peine à comprendre une erreur de compilation de G++. Le même code compile sans problème avec visual (et semble fonctionner).

    Voilà l'extrait qui pause problème :
    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
    template <int I, int I_MAX> struct SvVLoop
    	{
    		template<int N, class T>
    		static inline void SvV(T dt[N], T _v)
    		{
    			dt[I] = _v;
    			SvVLoop<I + 1, I_MAX>::SvV<N, T>(dt, _v);
    		}
    	};
    	template <int I_MAX> struct SvVLoop<I_MAX, I_MAX>
    	{
    		template <int N, class T>
    		static inline void SvV(T dt[N], const T _v) {}
    	};
    	template <int N, class T>
    	inline
    	VectorND<N, T>::VectorND(T _v)
    	{
    		SvVLoop<0, N>::SvV<N, T>(dt, _v);
    	}
    J'ai un joli
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    error: expected primary-expression before '>' token
    pour la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    			SvVLoop<I + 1, I_MAX>::SvV<N, T>(dt, _v);
    et la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    		SvVLoop<0, N>::SvV<N, T>(dt, _v);
    Le problème est que si je supprimer le "<N, T>", le compilateur m'informe qu'il ne parvient pas à trouver le modèle de fonction correspondant. (Je crois qu'il en est de même pour visual, de mémoire.)

    Je ne suis pas vraiment au point avec ces histoires de méta-programmation, donc je ne comprend pas trop ce qu'il m'arrive

    Une aide ne serait pas de refus
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

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

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Points : 2 205
    Points
    2 205
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	    SvVLoop<I + 1, I_MAX>::template SvV<N, T>(dt, _v);

    (visual est trop permissif sur ce genre de chose, c'est gcc qui est dans le vrai ici).
    "Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu

  3. #3
    screetch
    Invité(e)
    Par défaut
    (bien que Goten ait entièrement raison, j'aimerai que la norme soit de ne pas mettre le mot-clé template qui alourdit beaucoup la syntaxe )

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

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Points : 2 205
    Points
    2 205
    Par défaut
    C'est ça d'avoir une grammaire aussi ambigüe...
    "Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu

  5. #5
    Membre éprouvé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Points : 1 054
    Points
    1 054
    Par défaut
    Citation Envoyé par Goten Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	    SvVLoop<I + 1, I_MAX>::template SvV<N, T>(dt, _v);

    (visual est trop permissif sur ce genre de chose, c'est gcc qui est dans le vrai ici).
    Ah, je ne connaissais pas la grammaire exacte alors. Merci.
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

Discussions similaires

  1. Génération de code par xcode
    Par adissa357 dans le forum Objective-C
    Réponses: 1
    Dernier message: 26/07/2013, 12h57
  2. Ajout de TreeviewItem par code et Template
    Par Douze144 dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 26/10/2011, 15h40
  3. Réponses: 1
    Dernier message: 25/05/2009, 01h36
  4. Réponses: 0
    Dernier message: 18/07/2008, 11h19
  5. Réponses: 24
    Dernier message: 11/06/2008, 15h26

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