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