Мне нужно передать функцию в указатель. Для этого я использую boost :: function. Функция, которая улавливает указатель, перегружается для разных подписей. Например:Указатели на функции
void Foo(boost::function<int()>) { ... }
void Foo(boost::function<float()>) { ... }
void Foo(boost::function<double()>) { ... }
Теперь я хочу передать какой-то указатель класса метода есть:
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()>&)
Для функции повышения, сценарий еще более злой, чем этот. Это как 'template struct A {template A (U); }; 'now, * that * выглядит неразрешимым для меня xD Обратите внимание, что вы * можете * конвертировать, если у вас есть только одна функция. Трудность состоит в том, чтобы * сравнить * две такие последовательности преобразования. В случае с функцией boost :: function это совершенно невозможно, и в вашем случае это может быть возможно, но это слишком сложно для перенаправления, чтобы беспокоиться. –
@Johannes Schaub: Вы правы. Мой пример иллюстрировал совершенно другую проблему: двусмысленность вместо «неразрешимости» :) – AnT