如何在初始化其他初始化后初始化类的静态成员?

问题描述:

我希望能够初始化静态成员scalingfactor在下面的类:如何在初始化其他初始化后初始化类的静态成员?

class ScalingRect: public Rect 
{ 
public: 
    static float scalingfactor; 

    ... 
}; 

我想我会使用另一个类的静态成员函数初始化像这样的的.cpp

float ScalingRect::Rect = Engine::GetScaleFactor(); 

但是,我不想在Engine课程准备好之前致电GetScaleFactor()。我如何确保在正确的时间接到电话?

的而不是静态的类成员,使它成为一个静态方法内部的静电,关于你的第一个电话

class ScalingRect: public Rect 
{ 
public: 
    static float& scalingfactor() 
    { 
     if (!Engine::initilized()) throw ("initilize Engine first!"); 
     static float value = Engine::GetScaleFactor(); 
     return _value; 
    } 

    ... 
}; 

我们scalingfactor()应该理想地在initiliazer为引擎的结束,或者只要你保证你到scalingfactor第一次调用()发生的情况:和参考回到它发动机初始化程序完成后应该工作...

(如果需要使用线程安全合适的防护)可以实现GetScaleFactor点播INIT:

float Engine::GetScaleFactor() 
{ 
    if (!Engine::initialized()) 
    { 
    // do the engine init here, making sure no other thread is already in progress 
    } 
    return scaleFactor; 
}