2010-10-28 49 views
0

我希望能夠初始化靜態成員scalingfactor在下面的類:如何在初始化其他初始化後初始化類的靜態成員?

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

    ... 
}; 

我想我會使用另一個類的靜態成員函數初始化像這樣的的.cpp

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

但是,我不想在Engine課程準備好之前致電GetScaleFactor()。我如何確保在正確的時間接到電話?

回答

2

的而不是靜態的類成員,使它成爲一個靜態方法內部的靜電,關於你的第一個電話

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第一次調用()發生的情況:和參考回到它發動機初始化程序完成後應該工作...

1

(如果需要使用線程安全合適的防護)可以實現GetScaleFactor點播INIT:

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