C ++でクラスの静的配列メンバーを初期化するより良い方法です(ただし、constは望ましいでしょう)

私はクラスのメンバとして関数へのポインタの静的な配列を持っています。

私はそれを初期化する必要がありますが、この配列は64Kの項目が長いので、 {x、y、z、...} のような静的初期化子で初期化するのは実用的ではありませんコード。

私は代わりにいくつかのループで、コードで初期化する必要があります。

これを行う方法は、コンストラクタの static 配列を初期化してフラグを設定することです。したがって、クラスの最初のインスタンスの構築だけがこの初期化を起動します。

また、インスタンス内からこの静的フラグにアクセスすることはスレッドセーフではありませんが、それは別の話です。

これを行うためのよりクリーンな方法がありますか?

この配列を const にしたいと思っていますが、これを行う唯一の方法は static {} の初期化です

0
@Nikolaiはいそうです、別の#includedファイルでやってみようと考えていました
追加された 著者 Petruza,
@Sethいいえ、配列には64Kの項目があり、配列の型は関数へのポインタなので、関数へのポインタは65536です。配列がN対1の関係を指す約8つのユニークな関数があります。
追加された 著者 Petruza,
コード生成。 Perl、Python、何でも。
追加された 著者 Nikolai Fetissov,
{&nitializer、&lists} とまったく同じように混乱することなく、これらすべての機能アドレスを取得する方法に本当に関心がありますか? AFAIK C ++には反射がありませんか?
追加された 著者 sehe,
64万の機能は何ですか?また、すべての関数に名前が付いている場合、どのようにループ内でこれを行うことができますか?
追加された 著者 Seth Carnegie,

2 答え

別のオプションは、コード生成を使用することです:静的配列の定義のソースコードを生成する別のプログラムを作成します。

6
追加された
はい、最高のオプションのように聞こえます、ありがとう。
追加された 著者 Petruza,

きれいなコードではないかもしれませんが、メンバー配列を静的な参照にする方法はありますか?

ヘッダファイル:

class MyClass
{
    ...
    static const std::vector& pointer_vector;
};

実装ファイル:

namespace
{
    typedef std::vector 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に関する基本情報は、ウィキペディア、そのドキュメントをご覧ください。

1
追加された
しかし65536要素の固定配列と直接ランダムアクセスが必要なので、std :: vectorの必要はありません。
追加された 著者 Petruza,