我重构了我的 SDL2 代码以利用 C++11 的一些新功能并让一些 shared_ptr 处理清理。然后我偶然发现了这个问题。现在我在创建 openGL 上下文时写这个。
auto window = shared_ptr<SDL_Window>(SDL_CreateWindow(
"Opengl stuff", 0, 0, width, height, windowFlags),
SDL_DestroyWindow);
auto context = shared_ptr<void>(
SDL_GL_CreateContext(window.get()),
SDL_GL_DeleteContext);
问题是当我想赋值给变量上下文时,我找不到正确的东西写在 shared_ptr 的括号中(上面代码中为空)。
typedef struct SDL_Window SDL_Window;
typedef void *SDL_GLContext;
我真的希望它的形式与 shared_ptr<SDL_Window>
相同, 但自 SDL_GLContext
是指针类型是不可能的。你可以看到我所做的是使用 void 作为类型,但是如果我希望类型可见,我如何将指针类型“更改级别”为非指针类型?我知道如何对变量执行此操作,但我如何对类型执行此操作?
最佳答案
你可能正在寻找
std::remove_pointer<SDL_GLContext>::type
如果 SDL_GLContext
是 void*
的别名(或者通常是 T*
对于某些 T
),那么上面的结构是 void
(或者通常是 T
)的别名。
关于c++ - 向下指针键入与 shared_ptr 一起使用的级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52205167/