c++ - 在发生某些其他初始化后,如何初始化类的静态成员?

标签 c++

我希望能够在下面的类中初始化静态成员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() 应该在引擎初始化器的末尾,或者只要您确保第一次调用 scalingfactor() 发生在引擎初始化器完成之后,这应该可以工作。 .

关于c++ - 在发生某些其他初始化后,如何初始化类的静态成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4044204/

相关文章:

c++ - VC++ 使单行文本框在返回键上起作用(模仿按钮)

c++ - `#input`类型的宏字符串在C++中是如何分配的?

C++11 POD 结构初始化错误

c++ - 有没有更好的方法来打印最多 N 个字符的字符串?

c++ - 文件夹结构 - 良好做法

c++ - 创建交换链失败 2.0

C++ Tokenizer 复杂性与 strtok_r

c++ - 在流中搜索丢失的数字时表现不直观

c++ - LoadLibrary调用DLL时查找依赖的DLL

C++ : passing ofstream& to function to continually append to . txt 文件