Nonono это не может работать.Потому что boost::function<...>
имеет шаблонный конструктор для принятия любых типов.Совместимость с подписью звонка проверяется позже.Разрешение перегрузки не может решить эту проблему.
Кроме того, я думаю, что вы хотите передать &obj
вместо this
.Попробуйте преобразовать явно:
Foo(boost::function<float ()>(boost::bind(&test::toCall, &obj)));
Это очень уродливо, хотя, возможно, вы захотите ввести typedef
void Foo(FloatHandler) { ... }
...
FloatHandler f(boost::bind(&test::toCall, &obj));
Foo(f);
Или в конечном итоге вы можете сделать Foo
шаблоном, который принимает только любые вызываемыевведите T
.Я подозреваю, что это может быть самым простым, потому что в общем случае я подозреваю, что вы не знаете, к чему boost::function<...>
вам нужно обратиться.А как насчет людей, которые хотят вернуть std::complex<>
.Итак ...
template<typename T>
void Foo(T) { ... }
...
Foo(boost::bind(&test::toCall, &obj));
Надеюсь, это поможет.