Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在进行其他初始化之后,如何初始化类的静态成员?_C++ - Fatal编程技术网

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()的第一次调用就可以了