1
這是情況。我正在使用一個庫(GLFW),它具有一些回調函數,您可以設置它們以接收各種東西(錯誤,窗口大小更改等)的通知。這些功能必須是靜態的。爲了將這些數據返回到類的「非靜態」實例,我不得不讓它們變成單例。有沒有更好的/替代的方法來處理類中的強制靜態函數?靜態函數強制單例模式?
這裏是最好的,我拿出這麼遠:
//OpenGlTest.h
#pragma once
#include "glfw.h"
#pragma comment(lib,"opengl32.lib")
#pragma comment(lib,"glfw3dll.lib")
class OpenGlTest
{
public:
static OpenGlTest& GetInstance();
private:
OpenGlTest(void);
~OpenGlTest(void);
public:
void Initialize(void);
static void stError(int iError, const char* sMessage);
void onError(int iError, const char* sMessage);
};
//OpenGlTest.cpp
#include "stdafx.h"
#include "OpenGlTest.h"
OpenGlTest::OpenGlTest(void)
{ }
OpenGlTest::~OpenGlTest(void)
{ }
OpenGlTest& OpenGlTest::GetInstance()
{
static OpenGlTest stOpenGlTest;
return stOpenGlTest; //RETURN SINGLE INSTANCE
}
void OpenGlTest::Initialize(void)
{
glfwInit();
glfwSetErrorCallback(stError);
}
void OpenGlTest::onError(int iError, const char* sMessage)
{
//YAY WE ARE NOT STATIC!
}
void OpenGlTest::stError(int iError, const char* sMessage)
{
// BOO - THERE HAS TO BE ANOTHER WAY :(
GetInstance().onError(iError, sMessage);
}
我還保存一個指向一個靜態向量創建的每個類的想法玩弄 - 然後調用每個類中的方法在向量中。但那也只是感覺不對。
太棒了 - 這將有助於與窗口相關的回調。但是在沒有窗口句柄(錯誤/輸入)的情況下調用呢? – cschear
@cschear:GLFW似乎以全局方式處理錯誤。我不知道它的錯誤有多嚴重,但如果它們處於嚴重的一面,你可能只想打印一條消息並退出。至於輸入,文檔說*有*窗口指針。 – icktoofay
啊,你說得對。我還沒有開始處理輸入。感謝您的幫助 - 我從來沒有發現這一點。 – cschear