2010-07-09 32 views
1

Compte tenu de la surcharge de fonction membre suivante pour prendre diverses foncteursboost :: fonction et des pointeurs de fonction simples: surcharge ambigous

class Foo { 
public: 
    void bar(boost::function<void(int)> func); 
    void bar(boost::function<void(float)> func); 
    void bar(boost::function<void(const std::vector<float>&)> func); 
} 

et la fonction

void baz(float f) { std::cout << "float :" << f << std::endl; } 

alors pourquoi prendre le pointeur de la fonction plaine de baz

Foo foo; 
foo.bar(&baz); 

rendement cette erreur:

error: call of overloaded ‘bar(void (*)(float))’ is ambiguous 
note: candidates are: void Foo::bar(boost::function<void(int)>) 
note: void Foo::bar(boost::function<void(float)>) 
note: void Foo::bar(boost::function<void(const std::vector<float, std::allocator<float> >&)>) 

Comment résoudre cette ambiguïté?

Répondre

0

Pas assez et pas en sécurité:

foo.bar(static_cast<function<void(float)> >(&baz)); 
0

Une autre alternative: utiliser Initializers.

foo.bar(function<void(float)>{ &baz });