Pau*_*ter 2 c++ initialization
使用简单的值,没有问题:我们只需在.cpp文件中设置它们.
但请考虑以下示例,它需要一些init/cleanup代码:
// .h
class MyClass {
...
private:
static unsigned First1000Primes[1000];
} ;
Run Code Online (Sandbox Code Playgroud)
在.cpp文件中,我们要初始化数组,并需要一些代码.
我们可以在.cpp文件中定义一个类Initializer,使用一个填充值的ctor,并在同一个文件中声明一个静态的Initializer InitAndCleanup,这样代码将在启动时运行一次(如果需要,同样运行dtor/cleanup代码) .
这个解决方案的问题在于它的"混乱",因为初始化程序必须是MyClass的朋友才能访问其私有部分.
所以我的问题是:有更干净的方式吗?
请std::array改用.
class MyClass {
...
private:
static std::array<unsigned, 1000> First1000Primes;
} ;
Run Code Online (Sandbox Code Playgroud)
现在初始化的问题是一个简单的lambda
std::array<unsigned, 1000> MyClass::First1000Primes = [&] {
std::array<unsigned, 1000> primes;
// fill primes
return primes;
}();
Run Code Online (Sandbox Code Playgroud)
您可以使用初始化静态的常规方法:
unsigned MyClass::First1000Primes[] = {2,3, /*...*/};
Run Code Online (Sandbox Code Playgroud)
在实现文件中.我建议你std::vector改用吗?