C++ 如何在不显式转换的情况下降级函数调用中的 class 实例?
C++ How can I degrade a class instance in a function call without explicitly casting?
我想创建一个 Window class 来管理 SDL_Window 指针,并且访问 SDL_Window 指针以进行函数调用同样简单,只需使用 Window class 实例并让转换运算符充当 "getter"。像这样:
Window win("some name",10,10,100,100,Flags);
SDL_DoSthWithWin(win,10.0f); //SDL_DoSthWithWin uses SDL_Window* but its converted.
我目前的尝试看起来(有点)像这样:
class Window{
private:
//Irrelevant
SDL_Window *window; //SDL Type for handling Windows. Always a pointer
static Window *ActiveWindow //Pointer to the active Window.
//More irrelevant stuff
public:
static Window& getActive(); //this returns a reference to the active obj
Window(someParms);
explicit operator SDL_Window* (){return this->window;}; //This conversion operator should do the trick?
//More irrelevant stuff really
}
然而,结果是出于某种原因,如果不像这样显式转换它就无法工作:
SDL_DoSthWithWin((SDL_Window*)win,---);
如果制作该转换运算符的全部意义在于保存编写“.getWindow()”
所需的字母,那就太好了
好吧,我怎样才能(正确地)做到这一点,这样我就不必施法了。
好吧你做说转换运算符是explicit
。这意味着您实际上必须明确关于该转换。
我应该补充一点,这通常是一个糟糕的选择,因为有这样一个隐式转换运算符。必须明确并使用 getWindow
(或类似命名的函数)来获取 SDL_Window
指针使代码更易于理解、阅读和维护。
我想创建一个 Window class 来管理 SDL_Window 指针,并且访问 SDL_Window 指针以进行函数调用同样简单,只需使用 Window class 实例并让转换运算符充当 "getter"。像这样:
Window win("some name",10,10,100,100,Flags);
SDL_DoSthWithWin(win,10.0f); //SDL_DoSthWithWin uses SDL_Window* but its converted.
我目前的尝试看起来(有点)像这样:
class Window{
private:
//Irrelevant
SDL_Window *window; //SDL Type for handling Windows. Always a pointer
static Window *ActiveWindow //Pointer to the active Window.
//More irrelevant stuff
public:
static Window& getActive(); //this returns a reference to the active obj
Window(someParms);
explicit operator SDL_Window* (){return this->window;}; //This conversion operator should do the trick?
//More irrelevant stuff really
}
然而,结果是出于某种原因,如果不像这样显式转换它就无法工作:
SDL_DoSthWithWin((SDL_Window*)win,---);
如果制作该转换运算符的全部意义在于保存编写“.getWindow()”
所需的字母,那就太好了好吧,我怎样才能(正确地)做到这一点,这样我就不必施法了。
好吧你做说转换运算符是explicit
。这意味着您实际上必须明确关于该转换。
我应该补充一点,这通常是一个糟糕的选择,因为有这样一个隐式转换运算符。必须明确并使用 getWindow
(或类似命名的函数)来获取 SDL_Window
指针使代码更易于理解、阅读和维护。