3 回答
TA贡献1803条经验 获得超6个赞
要获得与静态构造函数等效的功能,您需要编写一个单独的普通类来保存静态数据,然后创建该普通类的静态实例。
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
};
TA贡献1872条经验 获得超3个赞
好吧,你可以拥有
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;
该程序仍将链接而没有第二行,但是将不执行初始化程序。
TA贡献1784条经验 获得超8个赞
C ++ 11解决方案
从C ++ 11开始,您可以简单地使用lambda表达式初始化静态类成员。如果您需要在各个静态成员之间强加一个构造顺序,或者如果您具有静态成员,那么这甚至可以工作const。
头文件:
class MyClass {
static const vector<char> letters;
static const size_t letterCount;
};
源文件:
// Initialize MyClass::letters by using a lambda expression.
const vector<char> MyClass::letters = [] {
vector<char> letters;
for (char c = 'a'; c <= 'z'; c++)
letters.push_back(c);
return letters;
}();
// The initialization order of static members is defined by the order of
// definition within the source file, so we can access MyClass::letters here.
const size_t MyClass::letterCount = letters.size();
- 3 回答
- 0 关注
- 579 浏览
添加回答
举报