所以,就像我迄今为止所做的以及我想要实现的目标一样......
目前我正在使用一大堆单例类来传递我的实例,当我正在研究多线程并听到(更像是读取)单身人士可能变得邪恶时,这将很快成为一个非常糟糕的主意涉及多线程时的一个大问题。
在我的主init类中,我有代码初始化窗口,渲染器和曲面(SDL2)。我想要破解代码,以便我有一个只处理窗口代码的类,与渲染器和表面一样。
我正在寻找方法(如果可能的话)创建一个变量的实例,该变量将保持说主窗口,然后能够在不使用专用函数的情况下访问所述变量...例如:< / p>
在window的init函数中:
bool Window::init() {
m_primaryWindow = SDL_CreateWindow(creation info here);
if (!m_primaryWindow) {
SDL_LogInfo(INFO, "Primary Window Created");
return true;
}
else {
SDL_LogCritical(CRITICAL, "Could Not Create Primary Window:\n%s", SDL_GetError());
return false;
}
};
如你所见,正常吗?好吧,假设我在Window
中创建了一个Game
类,我必须添加一个函数,例如:
SDL_Window* primaryWindow = window.getPrimaryWindow();
获取该实例。但那不是我想要的!我想在SDL_Window
中只创建一个Window
变量,并在一个使用字符串的函数中引用它?例如:
SDL_Window* Window::getWindow(std::string id);
这样在Game
中我可以初始化并显示窗口然后调用实例,如:
Window m_window;
m_window.getWindow(primaryWindow);
这样我就可以使用它而不是在我的代码中不断创建SDL_Window *变量。
同样需要使用渲染器完成!
编辑:
好的,所以我做了以下更改并且它有效...但我无法访问映射结构中的值:
Window.hpp
typedef struct {
SDL_Window* window;
const char* title;
int width;
int height;
int flags;
} m_windowStruct;
typedef std::map<std::string, m_windowStruct*> m_windowMap;
Window.cpp
bool Window::init() {
if (!createWindow("window creation variables here") {
return true;
}
else {
return false;
}
};
bool Window::createWindow(std::string id, const char* title, int width, int height, int flags) {
m_windowMap* windowMap;
m_windowStruct windowData;
windowData.window = SDL_CreateWindow(title,
SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
width, height, flags);
if (!windowData.window) {
windowData.title = tile;
windowData.width = width;
windowData.height = height;
windowData.flags = flags;
windowMap->insert(m_windowMap::value_type(id, &windowData));
SDL_LogInfo(INFO, "Window creation successful");
return true;
}
else{
return false;
}
};
所以我想我现在的问题是..我如何从地图中的结构中抓取window
指针?
(另请注意,一旦我完成,我怎么会破坏指针?)