这是情况。我正在使用一个库(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);
}
我还玩弄了存储指向在静态向量中创建的每个类的指针的想法 - 然后在向量中的每个类上调用一个方法。但这也感觉不对。