struct A // some class
{
void method(); // non-static member method
static void function(); // static member method
};
void function(); // global function
vector<A> vi; // any such `std` like container
Je veux avoir une fonction (disons Iterate()
) qui peut être appelé de la manière suivante :
Iterate(vi, &A::method); // (1)
Iterate(vi, &A::function); // (2a)
Iterate(vi, &function); // (2b)
(2a) et (2b) sont tout simplement identiques.
Maintenant Iterate()
Le prototype ressemble à ce qui suit pour (1) et (2) :
template<typename Container, typename Method>
void Iterate (Container &container, Method method); // for (1)
template<typename Container, typename Function>
void Iterate (Container &container, Function function); // for (2a), (2b)
Naturellement, les deux sont exactement les mêmes, ce qui entraîne une erreur de compilation.
Existe-t-il un moyen de surcharger/spécialiser Iterate()
dans C++03 qui permettra aux deux fonctions de coexister ?