在没有专用功能的情况下访问某些变量实例?

时间:2015-04-07 19:22:16

标签: c++

所以,就像我迄今为止所做的以及我想要实现的目标一样......

目前我正在使用一大堆单例类来传递我的实例,当我正在研究多线程并听到(更像是读取)单身人士可能变得邪恶时,这将很快成为一个非常糟糕的主意涉及多线程时的一个大问题。

在我的主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指针?

(另请注意,一旦我完成,我怎么会破坏指针?)

0 个答案:

没有答案