WWindow :: operator HWND(){return _hwnd; }

Sta*_*owl 1 c++ overloading

我确实理解如何重载运算符,但显然不完全.

有人可以解释一下该部件的用法

WWindow::operator HWND()
{
    // This overloaded operator allows us to use HWND anyway we want
    return _hwnd;
}
Run Code Online (Sandbox Code Playgroud)

为了我?

我不明白怎么做

operator HWND(){ ... }
Run Code Online (Sandbox Code Playgroud)

应该工作吗?

rod*_*igo 6

这是一个自动转换运算符.一般原型是:

operator TYPE();
Run Code Online (Sandbox Code Playgroud)

也就是说,没有返回类型,因为它必须是您要转换的相同类型.

只要您使用需要WWindowa的原始对象(类型),就会调用此运算符HWND.

请注意,通常最好制作转换运算符const:

operator HWND() const { ... }
Run Code Online (Sandbox Code Playgroud)

但这取决于你想要它与它完全一致.

此外,如果您使用C++ 11,则可以将它们声明为显式:

explicit operator HWND() const { ... }
Run Code Online (Sandbox Code Playgroud)

这样它就不会在任意上下文中自动调用,而只能在少数几个更安全的情况下调用,比如使用static_cast<HWND>(w)or HWND h(w),但不能在DestroyWindow(w).