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