Pour une raison quelconque, je reçois ce message d'erreurboost :: tuple avec pointeur fonction membre
opérandes invalides de types de vide (S :: * const)() 'et « void (S :: * const)() » binaire « opérateur < »
pour cet extrait de code:
#include <boost/tuple/tuple.hpp>
#include <boost/tuple/tuple_comparison.hpp>
struct S
{
void f() {}
};
typedef void(S::*tdef)();
int main()
{
boost::tuple<tdef> t1(&S::f);
boost::tuple<tdef> t2(&S::f);
return t1 < t2;
}
documents Boost sont très peu loquace sur l'utilisation des pointeurs de fonction membre dans tuples (à part qu'ils sont des éléments valables s), donc je n'ai pas vraiment la moindre idée de ce qui pourrait être le problème ou comment ces qualificatifs 'const' sont entrés dans l'expression.
Un conseil?
Que voulez-vous réaliser avec cet 'opérateur <'? Les pointeurs de fonction membre dans C++ ne sont pas comparables sur le plan relationnel. – SingerOfTheFall
'boost :: tuple's sont comparés lexicographiquement. Donc 't1
101010
Je suppose qu'il est logique que le type de paramètre de & S :: f soit déduit comme void (S :: * const)(). L'adresse de la fonction (S :: f dans ce cas) est une constante. Vous pouvez essayer de surcharger l'opérateur global
rakeshdn