C++ 如何在不显式转换的情况下降级函数调用中的类实例?

标签 c++ type-conversion sdl operator-keyword

我想制作一个管理 SDL_Window 指针的 Window 类,访问 SDL_Window 指针以进行函数调用同样简单,只需使用 Window 类实例并让转换运算符充当“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()”所需的字母,那就太好了

那么我怎样才能(正确地)做到这一点,这样我就不必转换了。

最佳答案

好吧,您确实说转换运算符是显式。这意味着您实际上必须明确该转换。

我应该补充一点,这通常是一个糟糕的选择,因为有一个像这样的隐式转换运算符。必须明确并使用 getWindow(或类似命名的函数)来获取 SDL_Window 指针使代码更易于理解、阅读和维护。

关于C++ 如何在不显式转换的情况下降级函数调用中的类实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48244467/

相关文章:

c++ - 使用WIC(Windows镜像组件)时遇到的问题

c - atoi() 是 C 标准的一部分吗?

c++ - SDL 翻转两个表面

c++ - Sleep(1) 和 SDL_Delay(1) 需要 15 ms

c++ - 有没有一种好方法可以对 C++ 中的可变参数模板中的函数参数实现类型限制?

c++ - boost::asio::io_service async_write 在执行 async_read 时循环

c++ - 提升智能指针和线程

c# - 将字符串或字符转换为整数

sql - 在 SQL Server 中将 nvarchar ISO-8601 日期转换为日期时间

c++ - 防止SDL程序消耗额外资源