我有一个指向函数的静态数组指针作为类的成员。
我需要对它进行初始化,但事实证明这个数组的长度是64K项,所以使用像{ x, y, z, ... }
之类的静态初始化器来初始化它是不切实际的,因为它会使代码混乱。
我反而用代码初始化它,有几个循环。
我想要这样做的方法是初始化构造函数中的static
数组并为其设置一个标志,因此只有该类的第一个实例的构造才会触发此初始化。
同样从实例中访问此静态标志不是线程安全的,但这是另一个故事。
有更清洁或更好的方法吗?
我也希望这个数组是const
,但我担心唯一的方法是使用static {}
初始化,对吗?
答案 0 :(得分:6)
另一种选择是使用代码生成:编写一个单独的程序,生成静态数组定义的源代码。
答案 1 :(得分:1)
也许不是最干净的代码,但如何使成员数组成为静态引用;
头文件:
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 doc)。它是TR1的一部分。有关TR1的基本信息可以在wikipedia上找到,其documentation位于Boost下。