在C++中我可以将结构作为指针传递而不在本地声明它吗?

Kri*_*ves 9 c++ sdl

我正在使用SDL,这是一个C库,它具有如下函数的声明:

void SDL_foo(SDL_Rect *rect);
Run Code Online (Sandbox Code Playgroud)

我有自己的包装围绕一些这样的函数:

void foo(SDL_Rect rect) {
  SDL_foo(&rect);
}
Run Code Online (Sandbox Code Playgroud)

这样我就可以这样称呼它们:

foo({x, y, w, h});
Run Code Online (Sandbox Code Playgroud)

我的问题是:是否可以避免使用包装函数并执行以下操作:

SDL_foo(&{x, y, w, h});
Run Code Online (Sandbox Code Playgroud)

谢谢!

sky*_*ack 9

不,你不能这样做,因为你无法获得临时的地址.
但是你可以用一种这样的包装来逃脱它:

struct MyRect {
    MyRect(SDL_rect rect): rect{rect} {}
    operator SDL_rect *() { return ▭ }
    SDL_rect rect;
};

SDL_foo(MyRect{{x, y, w, h}});
Run Code Online (Sandbox Code Playgroud)

尚未测试,但它应该让你知道我的意思.
这样,您不必为SDL中的所有函数创建包装器,而只需创建一个小包装器SDL_rect.
不管怎样,不确定它是否适合你.