我希望能够在以下类中初始化静态成员scalingfactor
:
class ScalingRect: public Rect
{
public:
static float scalingfactor;
...
};
我以为我会在.cpp
中使用另一个类的静态成员函数初始化它float ScalingRect::Rect = Engine::GetScaleFactor();
但是,我不想在GetScaleFactor()
课程准备好之前致电Engine
。如何确保在合适的时间调用它?
答案 0 :(得分:2)
而不是将static作为类成员,在静态方法中使其成为静态,并返回对它的引用:
class ScalingRect: public Rect
{
public:
static float& scalingfactor()
{
if (!Engine::initilized()) throw ("initilize Engine first!");
static float value = Engine::GetScaleFactor();
return _value;
}
...
};
现在第一次调用scalingfactor()应理想地位于initiliazer for Engine的末尾,或者只要你确保在Engine初始化程序完成后第一次调用scalingfactor()就会发生这种情况。
答案 1 :(得分:1)
您可以在GetScaleFactor
中实现按需初始化(如果需要,可以使用合适的防护线程来保护线程):
float Engine::GetScaleFactor()
{
if (!Engine::initialized())
{
// do the engine init here, making sure no other thread is already in progress
}
return scaleFactor;
}