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:
Même en commentant l'intérieur ca passe pas. L'erreur du compilateur (g++) est très précis
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; }
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.
J'avoue la source du stl_function.h copié/collé ca sert a rien...
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;
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
Partager