如何在初始化其他初始化后初始化类的静态成员?
问题描述:
我希望能够初始化静态成员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;
}