Je dois passer la fonction au pointeur. Pour ce faire, j'utilise boost :: function. La fonction qui attrape le pointeur est surchargée pour différentes signatures. Par exemple:Pointeurs vers les fonctions
void Foo(boost::function<int()>) { ... }
void Foo(boost::function<float()>) { ... }
void Foo(boost::function<double()>) { ... }
Maintenant, je veux passer un peu de pointeur méthode de classe il:
class test
{
public:
float toCall() { };
};
class Wrapper
{
Wrapper() {
test obj;
Foo(boost::bind(&test::toCall, this));
}
};
error: no matching function for call to ‘Foo(boost::_bi::bind_t<float, boost::_mfi::mf0<float, test>, boost::_bi::list1<boost::_bi::value<Wrapper*> > >)’
note: candidates are: Foo(boost::function<float()>&)
Pour la fonction Boost, le scénario est encore plus mauvais que cela. C'est comme 'template struct A {template A (U); }; 'now, * that * me semble insoluble xD Notez que vous pouvez * convertir * si vous n'aviez qu'une seule fonction. La difficulté est de * comparer * deux de ces séquences de conversion. Dans le cas de boost :: function, c'est carrément impossible, et dans votre cas, cela pourrait être possible, mais c'est trop compliqué pour les over-res. –
@Johannes Schaub: Vous avez raison. Mon exemple illustrait un problème complètement différent: l'ambiguïté au lieu de "l'insoluble" :) – AnT