在c++中初始化类的静态数组成员的更好方法(不过最好是const)
A better way to initialize a static array member of a class in C++ ( const would be preferred though )
我有一个指向函数的指针静态数组,作为类的成员。
我需要初始化它,但事实证明这个数组有64K项长,所以用{ x, y, z, ... }
这样的静态初始化器初始化它是不切实际的,因为它会使代码混乱。
我必须通过代码初始化它,使用几个循环。
我想到的方法是在构造函数中初始化static
数组并为其设置一个标志,因此只有类的第一个实例的构造才会触发此初始化。
从实例内访问这个静态标志也不是线程安全的,但那是另一回事。
是否有更干净或更好的方法来做这件事?
我也希望这个数组是const
,但恐怕唯一的方法是用static {}
初始化,对吧?
另一种选择是使用代码生成:编写一个单独的程序,生成静态数组定义的源代码。
可能不是最干净的代码,但是如何使成员数组为静态引用;
头文件:
class MyClass
{
...
static const std::vector<pointer to member>& pointer_vector;
};
实现文件:namespace
{
typedef std::vector<pointer to member> t_pointer_vector;
t_pointer_vector pointer_vector;
const t_pointer_vector& initialize_pointer_vector(void)
{
//generate pointer_vector
return pointer_vector;
}
}
t_pointer_vecotor& MyClass::pointer_vector = initialize_pointer_vector();
如果你不想要std::vector
,你可以看看std::tr1::array
,一个固定大小的数组,比C风格的数组更安全,效率也不低(根据Boost文档)。它是TR1的一部分。关于TR1的基本信息可以在wikipedia上找到,它的文档在Boost下面。
相关文章:
- 从 const 对象访问非 const 方法
- 为什么我可以调用一个从const方法更改成员的方法
- 使用新的c++返回值语法的Const方法
- const_cast const 方法中的"this"将"this"分配给外部变量?
- const 方法使用引用修改对象
- 从具有相同基数的另一个派生类调用派生类的非 const 方法
- 返回非常量引用编译的 Const 方法
- C++:无法从 const 方法返回对象的shared_ptr
- 是否可以从 const 方法迭代链表
- 为什么在const和非const方法中删除代码重复不是不确定的行为
- 在使用指向 const 和非 const 方法的成员指针时减少模板专用化的数量
- "可变"变量只能由 const 方法之一可变?
- Golang中的const方法
- C++ 逻辑恒常性和 const方法的按值返回
- c++将标志添加到const方法中
- C++防止const方法通过成员指针或引用更改数据
- 为什么 const 方法不覆盖 C++ 中的非 const 方法?
- 如何在const方法中迭代映射
- 为什么没有标准化的方法来避免const方法的代码重复
- 修改 const 方法中的 pointee 值