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 d'un foncteur


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 9
    Par défaut spécialisation d'un foncteur
    Après avoir regardé sur la doc du C++,

    Spécialisation des template dans les cours et tutoriels C++ : http://cpp.developpez.com/cours/


    La faq sur les prédicats et les foncteurs:
    http://c.developpez.com/faq/cpp/?page=STL#STL_predicate

    Et même le code source de la librairie standard: voir tout en bas

    J'ai beau essayer j'arrive toujours pas à spécialiser un template de prédicat comme celui-ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #include <functional>
    template <>
    struct std::greater< int >
    {
    //	bool operator()( const int x, const int y) const
    //	{
    //		return ( x > y );
    //	}
    };
     
    int main(int argc, char *argv[])
    {
    	return 0;
    }
    Même en commentant l'intérieur ca passe pas. L'erreur du compilateur (g++) est très précis
    greater.cpp:3: erreur: specialization of «template<class _Tp> struct std::greater» in different namespace

    Mais je vois pas ce qu'il attend.

    Alors pour référence, j'essaye de zieuter dans le code source du fichier qui définit le greater (bits/stl_function.h), remarquez c'est défini dans l'espace std.

    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
     
     
    namespace std
    {
    // Ca c'est la définition du binary_function .. voir plus bas pour le greater
    template <class _Arg1, class _Arg2, class _Result>
        struct binary_function
        {
          typedef _Arg1 first_argument_type;   ///< the type of the first argument
                                               ///  (no surprises here)
     
          typedef _Arg2 second_argument_type;  ///< the type of the second argument
          typedef _Result result_type;         ///< type of the return type
        };
    // Et la définition du greater
    template <class _Tp>
        struct greater : public binary_function<_Tp, _Tp, bool>
        {
          bool
          operator()(const _Tp& __x, const _Tp& __y) const
          { return __x > __y; }
        };
    } // namespace std;
    J'avoue la source du stl_function.h copié/collé ca sert a rien...

    Edit: par contre j'ai trouvé un post que j'ai oublié de glisser ici, qui parle de la même chose et qui utilise une syntaxe similaire.
    http://www.developpez.net/forums/sho...d.php?t=238181

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 258
    Par défaut
    Citation Envoyé par bobyjoe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include <functional>
    template <>
    struct std::greater< int >
    {
    //	bool operator()( const int x, const int y) const
    //	{
    //		return ( x > y );
    //	}
    };
    Le problème vient de . Pour spécialiser une classe dans un namespace, la syntaxe correcte est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    namespace std
    {
    template <>
    struct greater< int > : public binary_function<int, int, bool>
    {
          bool operator()( const int x, const int y) const
          {
                  return ( x > y );
          }
    };
    }

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 9
    Par défaut
    Effectivement.

    Merci beaucoup.

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

Discussions similaires

  1. spécialisation comportement foncteur
    Par CedricMocquillon dans le forum C++
    Réponses: 3
    Dernier message: 24/08/2012, 16h45
  2. Réponses: 2
    Dernier message: 07/07/2005, 15h23
  3. Proposition trop spécialisée ?
    Par szdavid dans le forum Emploi
    Réponses: 7
    Dernier message: 04/05/2005, 16h07
  4. [std::list][find_if] problème avec mes foncteurs
    Par n!co dans le forum SL & STL
    Réponses: 12
    Dernier message: 04/02/2005, 11h56
  5. Distribution spécialisée apache ?
    Par FRANCKYIV dans le forum Développement
    Réponses: 5
    Dernier message: 23/10/2003, 15h46

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