我正在使用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)
谢谢!
不,你不能这样做,因为你无法获得临时的地址.
但是你可以用一种这样的包装来逃脱它:
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.
不管怎样,不确定它是否适合你.