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:
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:
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