C++ 在进行其他初始化之后,如何初始化类的静态成员?
我希望能够在以下类中初始化静态成员C++ 在进行其他初始化之后,如何初始化类的静态成员?,c++,C++,我希望能够在以下类中初始化静态成员scalingfactor: class ScalingRect: public Rect { public: static float scalingfactor; ... }; 我想我应该在.cpp中使用另一个类的静态成员函数初始化它 float ScalingRect::Rect = Engine::GetScaleFactor(); 但是,我不想在引擎类准备就绪之前调用GetScaleFactor()。如何确保在正确的时间调用它?您
scalingfactor
:
class ScalingRect: public Rect
{
public:
static float scalingfactor;
...
};
我想我应该在.cpp中使用另一个类的静态成员函数初始化它
float ScalingRect::Rect = Engine::GetScaleFactor();
但是,我不想在
引擎
类准备就绪之前调用GetScaleFactor()
。如何确保在正确的时间调用它?您可以在GetScaleFactor
中实现按需初始化(如果需要,可以使用适当的线程安全防护):
您可以在
GetScaleFactor
中实现按需初始化(如果需要,可以使用适当的线程安全防护):
不要将static作为类成员,而是将其设置为静态方法中的静态,并返回对其的引用:
class ScalingRect: public Rect
{
public:
static float& scalingfactor()
{
if (!Engine::initilized()) throw ("initilize Engine first!");
static float value = Engine::GetScaleFactor();
return _value;
}
...
};
现在,理想情况下,对scalingfactor()的第一次调用应该在引擎的initilizer的末尾,或者只要您确保对scalingfactor()的第一次调用发生在引擎初始值设定项完成之后,这应该可以工作…将静态作为类成员,而不是将其作为静态方法中的静态,并返回对它的引用:
class ScalingRect: public Rect
{
public:
static float& scalingfactor()
{
if (!Engine::initilized()) throw ("initilize Engine first!");
static float value = Engine::GetScaleFactor();
return _value;
}
...
};
现在,理想情况下,对scalingfactor()的第一次调用应该在引擎的initilizer的末尾,或者只要您确保在引擎初始值设定项完成后对scalingfactor()的第一次调用就可以了