gpt4 book ai didi

c++ - 匹配重载 C++ 的隐式转换

转载 作者:太空宇宙 更新时间:2023-11-04 15:34:27 25 4
gpt4 key购买 nike

我无法理解函数重载的工作原理,归结为这个简单的例子:

class Foo {
public:
void bar(const bool & val) {}
};

void DoFn(std::function<void( Foo*, const wxString&)> fn ) {}

如果我现在这样调用 DoFn:

DoFn( &Foo::bar );

它编译得很好。它是如何在 std::function 的模板参数中从 bool 转换为 wxString 的?如果我将 wxString 更改为 std::string,则它无法按预期进行编译。

(wxString是wxWidgets中的一个类,版本2.8)

我真的不明白 wxString 类是如何声明它可以从 bool 转换为。

我试过按如下方式制作类(class):

class FakeString {
public:
FakeString(bool) {};
FakeString(const bool &){};
};

并用 FakeString 替换 DoFn 中的 wxString,但它不会编译说:

could not convert '&Foo::bar' from 'void (Foo::*)(const bool&)' to 'std::function<void(Foo*, const FakeString&)>'

最佳答案

你弄错了转换顺序:它是关于将 wxStrging 转换为 bool,而不是相反。

class FakeString {
public:
operator bool() const { return false; }
};

wxString 没有 bool 转换运算符,但有类似的东西:到 const char* 的隐式转换:

class FakeString {
public:
operator const char*() const { return nullptr; }
};

If you built wxWidgets with wxUSE_STL set to 1, the implicit conversions to both narrow and wide C strings are disabled and replaced with implicit conversions to std::string and std::wstring.

these是您正在寻找的 wxString 方法,指针转换运算符。

关于c++ - 匹配重载 C++ 的隐式转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38501082/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com