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 :

Séparer prototype et définition pour des fonctions template variadique.


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Séparer prototype et définition pour des fonctions template variadique.
    Salut, je voudrais séparer cette fonction dans deux fichier :

    Code cpp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    template <typename T,
                          class... D,
                          class = typename std::enable_if<std::is_fundamental<T>::value>::type>
                void operator() (T& data, D...) {
                    buffer<<data<<std::endl;
                }

    J'ai deux fichiers, un fichier.h et un fichier .impl que j'inclus à la fin du fichier .h, mais ça ne compile pas, gcc me dis que le prototype de la fonction n'existe pas...

    Y a t'il moyen de séparer ça dans deux fichiers différents, et si oui, comment faire ?

    Merci.
    Dernière modification par Invité ; 08/12/2014 à 09h40.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Re, en fait c'est parce que ma fonction à un paramètre template variadique que le compilateur me râle dessus, car, j'ai la même erreur pour chaque fonction avec un paramètre template variadique :

    [code]
    ||=== Build: Debug in ODFAEG (compiler: GNU GCC Compiler) ===|
    /home/laurent/Développement/Projets-c++/ODFAEG/include/odfaeg/Core/fastDelegate.impl|68|error: prototype for ‘T& odfaeg::core::RefVal<T>::get(Arg&& ...) const’ does not match any in class ‘odfaeg::core::RefVal<T>’|
    /home/laurent/Développement/Projets-c++/ODFAEG/include/odfaeg/Core/fastDelegate.h|183|error: candidate is: template<class T> template<class ... Arg> T& odfaeg::core::RefVal<T>::get(Arg&& ...) const|
    [/ccode]

  3. #3
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Une template (variadique ou non), n'est pas réellement séparable, car il faut absoluement le code de la template pour pouvoir l'utiliser une des fonctions qu'elle définit.

    Du coup, tu peux la prédéclarer avant de la définir, mais ca ne sert pas à grand chose pour le compilateur.
    C'est la raison pour laquelle tu dois actuellement inclure ton .impl à la fin de ton en-tête.

    Cela dit, ton problème c'est que tu n'as pas correctement templaté ton argument.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Ha bon, ça me surprend parce que pourtant je fais ceci dans le .h :

    Code cpp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    template <typename T,
                   class... D,
                   class = typename std::enable_if<std::is_fundamental<T>::value>::type>
    void operator() (T& data, D...) ;

    Et ceci dans le .impl que j'inclus à la fin du fichier.h

    Code cpp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    template <typename T,
                   class... D>
    void operator() (T& data, D...) {
           buffer<<data<<std::endl;
    }
    Pour toutes les classes et fonction template.

    Tu entends quoi par "templaté" un argument ?
    Je pense que je l'ai templaté correctement là. :/

    PS : de plus quand je le fais avec des template non variadique ça compile. :/
    Dernière modification par Invité ; 08/12/2014 à 14h32.

Discussions similaires

  1. Réponses: 4
    Dernier message: 09/09/2010, 18h14
  2. Meilleure API pour des fonctions mathématiques
    Par mat360 dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 18/06/2007, 17h51
  3. Pb pour des fonctions
    Par vuong1 dans le forum C++
    Réponses: 1
    Dernier message: 20/04/2007, 09h55
  4. aide pour des fonctions
    Par sharpeye dans le forum ASP
    Réponses: 2
    Dernier message: 11/04/2006, 09h25
  5. Pb de lien entre Access et Excel pour des fonctions VBA
    Par favien dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/11/2005, 01h00

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