C ++中的静态构造函数? 我需要初始化私有静态对象

我想要一个私有静态数据成员(包含所有字符az的向量)的类。 在java或C#中,我可以创建一个“静态构造函数”,它将在我创建该类的任何实例之前运行,并设置该类的静态数据成员。 它只运行一次(因为变量是只读的,只需要设置一次),并且由于它是该类的一个功能,它可以访问其私有成员。 我可以在构造函数中添加代码,检查vector是否已初始化,如果不是,则会初始化该代码,但会引入许多必要的检查,并且看起来不像是问题的最佳解决方案。

我想到,由于变量只能被读取,所以它们可以是公共静态常量,所以我可以在课堂外设置它们,但再一次,它看起来有点像一个丑陋的黑客。

如果我不想在实例构造函数中初始化它们,是否有可能在类中有私有静态数据成员?


要获得静态构造函数的等价物,您需要编写一个单独的普通类来保存静态数据,然后创建该普通类的静态实例。

class StaticStuff
{
     std::vector<char> letters_;

public:
     StaticStuff()
     {
         for (char c = 'a'; c <= 'z'; c++)
             letters_.push_back(c);
     }

     // provide some way to get at letters_
};

class Elsewhere
{
    static StaticStuff staticStuff; // constructor runs once, single instance

};

那么你可以拥有

class MyClass
{
    public:
        static vector<char> a;

        static class _init
        {
          public:
            _init() { for(char i='a'; i<='z'; i++) a.push_back(i); }
        } _initializer;
};

不要忘记(在.cpp中):

vector<char> MyClass::a;
MyClass::_init MyClass::_initializer;

该程序仍将链接没有第二行,但初始化程序将不会执行。


在.h文件中:

class MyClass {
private:
    static int myValue;
};

在.cpp文件中:

#include "myclass.h"

int MyClass::myValue = 0;
链接地址: http://www.djcxy.com/p/96347.html

上一篇: static constructors in C++? I need to initialize private static objects

下一篇: Stack Overflow