1

我的项目中有一些具有静态属性的类。我怎样才能创建一个静态方法来填充这些静态属性从中读取数据的容器。我怎样才能让一个静态方法在任何其他静态方法之前先运行。你如何首先加载哪些类的静态属性

4

1 回答 1

0

执行此操作的典型方法是将静态对象包装在 getter 函数中,以便在第一次使用之前不会创建它。

这样,顺序由程序的设计决定。

该方案的一个示例如下:

class MyClass {
   public:
     static
     MyContainer& GetTheContainer() {
        static MyContainer* fgCon = new MyContainer; // happens at first demand
        return *fgCon; // happens whenever MyClass::GetTheContainer() is called
     }

     static
     SomeObj& GetFromContainerAt(const int i) {
        MyContainer& c = GetTheContainer();
        return c.At(i);
     }
};

其余的取决于程序的设计。您可以让其他类填充容器——只要它们使用GetTheContainer,您就可以确定容器将首先被制作。或者您可以在创建容器时填充容器,方法是检查它是否为空(如果您确定它只会在创建时为空),或者使用标志系统:

     MyContainer& GetTheContainer() {
        static MyContainer* fgCon = new MyContainer; // happens at first demand
        static bool isNew = true; // only true the first time
        if (isNew) {
           // fill the container
           isNew = false;
        }
        return *fgCon; // happens whenever MyClass::GetTheContainer() is called
     }

例如,您可以在C++ 常见问题解答中阅读有关此方案的更多信息。

于 2013-05-11T05:43:20.817 回答