用c++传递SDL对象的最佳方式

Best way to pass SDL objects in c++

本文关键字:最佳 方式 对象 SDL c++ 传递      更新时间:2023-10-16

我用SDL在C++中开始了一个小游戏。我一直在研究指针和参考文献,我理解其中的差异。

int main(int argc, char* argv[])
{
    SDL_Renderer* renderer = NULL;
    TTF_Font* font = NULL;
    renderer = SDL_CreateRenderer(window, -1, 0);
    if(renderer == NULL)
    {
        return 1;
    }
    font = TTF_OpenFont("OpenSans.ttf", 12);
    if(font == NULL)
    {
        return 1;
    }
    texture = renderText(...)
    return 0;
}
SDL_Texture* renderText(...)
{
}

这是我程序的一部分,现在我需要将渲染器和字体对象传递给renderText()函数。我的问题是,我应该将它们作为指针(它们已经是指针了)还是作为引用传递?

这就是我认为的样子:

SDL_Texture* renderText(SDL_Renderer* renderer,...)
{
}
renderText(renderer,...)

SDL_Texture* renderText(SDL_Renderer &renderer,...)
{
}
renderText(*renderer,...)

稍后在renderText()函数中,我必须将SDL_Renderer的指针传递到其他SDL函数中,因此我必须使用&再次在第二种情况下。

只要您在处理SDL对象,就应该将它们保留为指针,因为当您将它们传递回SDL函数时,您只需要将它们转换回指针。在大多数情况下,您应该认为指向SDL资源的指针是不透明的。

SDL是一个C库。您建议的两种方法都可以,但C代码没有引用,所以每次您想将SDL_结构传递给函数时,都会使用&运算符。因此,在您的示例中最好使用指针,但更好的方法是创建一个小型SDLC++包装器。