0

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

我需要初始化它,但事实证明这个数组有 64K 长,所以用静态初始化器初始化它是不切实际的,{ x, y, z, ... }因为它会使代码混乱。

我不得不用代码初始化它,有几个循环。

我想这样做的方法是static在构造函数中初始化数组并为其设置一个标志,所以只有类的第一个实例的构造会触发这个初始化。

从实例内部访问这个静态标志也不是线程安全的,但这是另一回事。

有没有更清洁或更好的方法来做到这一点?

我也希望这个数组是const,但恐怕唯一的方法是static {}初始化,对吧?

4

2 回答 2

6

另一种选择是使用代码生成:编写一个单独的程序,为静态数组的定义生成源代码。

于 2011-11-12T23:27:34.967 回答
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 样式数组更安全且效率不亚于 C 样式数组(根据 Boost doc)。它是 TR1 的一部分。关于 TR1 的基本信息可以在wikipedia上找到,它的文档在 Boost 下。

于 2011-11-12T23:38:40.597 回答