我有一个问题,理解函数重载是如何工作的,它归结为这个简单的例子:
class Foo {
public:
void bar(const bool & val) {}
};
void DoFn(std::function<void( Foo*, const wxString&)> fn ) {}
Run Code Online (Sandbox Code Playgroud)
如果我现在这样称呼DoFn:
DoFn( &Foo::bar );
Run Code Online (Sandbox Code Playgroud)
它编译得很好.如何在std :: function的模板参数中从bool转换为wxString?如果我将wxString更改为std :: string,则无法按预期编译.
(wxString是wxWidgets中的一个类,版本2.8)
我真正不明白的是wxString类如何声明它可以从bool转换为.
我尝试过如下课程:
class FakeString {
public:
FakeString(bool) {};
FakeString(const bool &){};
};
Run Code Online (Sandbox Code Playgroud)
并使用FakeString替换DoFn中的wxString,但它没有编译说:
could not convert '&Foo::bar' from 'void (Foo::*)(const bool&)' to 'std::function<void(Foo*, const FakeString&)>'
Run Code Online (Sandbox Code Playgroud)
您的转换顺序错误:它是关于转换,而不是转换wxStrging到bool另一个方向.
class FakeString {
public:
operator bool() const { return false; }
};
Run Code Online (Sandbox Code Playgroud)
wxString没有bool转换运算符,但类似的东西:隐式转换为const char*:
class FakeString {
public:
operator const char*() const { return nullptr; }
};
Run Code Online (Sandbox Code Playgroud)
如果在wxUSE_STL设置为1的情况下构建wxWidgets,则禁用对窄C字符串和宽C字符串的隐式转换,并将其替换为对std :: string和std :: wstring的隐式转换.
而这些是你正在寻找,指针转换运营商wxString方法.