【发布时间】:2017-02-04 21:44:46
【问题描述】:
我有一个 c++ static 类的私有静态成员(与单例类非常相似,但无需分配类的实例,因为它是自动完成的)。
无论如何,我想初始化这个静态成员。通常,可以通过以下方式解决此问题
例子.h
class Example
{
private:
static OtherClass _value;
Example() {}
};
Example.cpp
#include "Example.h"
OtherClass Example::_value(constructor arguments)
我目前正在编写的代码不允许这样做。本质上,我正在为 OpenGL 编写一个 DebugDraw 类,该类将包含它自己的静态成员,用于创建 OpenGL 着色器的 Shader 对象。如果我用上面的方法,在初始化glew之前会先构建Shader,会造成一些大问题。
这是我正在使用的解决方案。
例子.h
class Example
{
public:
Initialize();
private:
static OtherClass _value;
Example(){}
};
Example.cpp
#include "Example.h"
Example::Initialize()
{
OtherClass _value(constructor arguments)
// Other code that I will need to add
}
这样编写的代码可以编译,但它会达到我想要的效果(初始化静态类成员)吗?调用 Initialize 函数之前的静态成员是什么意思(我也打算在其中放入一个已初始化的 bool)?
谢谢
这是我正在使用的实际代码。
DebugDraw.h
#ifndef DEBUGDRAW_H
#define DEBUGDRAW_H
#include <GLM\glm\vec4.hpp>
#include "Shader.h"
class DebugDraw
{
public:
static void Initialize();
static void Line();
static void Triangle();
static void Box();
static void Color();
private:
static glm::vec4 _color;
static Shader _shader;
DebugDraw() {}
};
#endif // !DEBUGDRAW_H
DebugDraw.cpp
#include "DebugDraw.h"
void DebugDraw::Initialize()
{
glm::vec4 _color(1.0f, 1.0f, 1.0f, 1.0f);
Shader _shader("Shader/debug.vert", "Shader/debug.frag");
_shader.Use();
}
^ 这确实可以编译 ^
【问题讨论】:
-
你确定它可以编译吗?类声明结束后缺少
;。 -
是的,这段代码就是一个例子。我不想发布我正在编写的 opengl 代码。我只想知道这件事