在c++中初始化类的静态数组成员的更好方法(不过最好是const)

A better way to initialize a static array member of a class in C++ ( const would be preferred though )

本文关键字:const 方法 更好 初始化 c++ 静态 组成员 数组      更新时间:2023-10-16

我有一个指向函数的指针静态数组,作为类的成员。

我需要初始化它,但事实证明这个数组有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下面。