C++ У меня есть проблема с пониманием, как функция перегрузки работы, она сводится к этому простому примеру:неявного преобразования для согласования перегрузок
class Foo {
public:
void bar(const bool & val) {}
};
void DoFn(std::function<void(Foo*, const wxString&)> fn) {}
, если я теперь называю DoFn так:
DoFn(&Foo::bar);
это компилирует штраф. Как это преобразование из bool в wxString в параметр шаблона для std :: function? Если я изменю wxString на std :: string, тогда он не скомпилируется, как ожидалось.
(wxString класс в WxWidgets, версия 2.8)
То, что я действительно не понимаю, как класс wxString может объявить его можно преобразовать в из BOOL.
Я попытался сделать класс следующим образом:
class FakeString {
public:
FakeString(bool) {};
FakeString(const bool &){};
};
и замена wxString в DoFn с FakeString, но он не компилируется говоря:
could not convert '&Foo::bar' from 'void (Foo::*)(const bool&)' to 'std::function<void(Foo*, const FakeString&)>'
Можете ли вы предоставить действующий рабочий код? Вы абсолютно уверены, что нет другой версии 'bar', которая принимает' wxString', которую вы пропустили? – Smeeheey
Я скомпилировал этот код –
Ну, это не мог быть буквально этот код как отсутствующий '#include'. Вы говорите, что это единственная разница? –
Smeeheey