0

クラスのメンバーとして、関数へのポインターの静的配列があります。

初期化する必要がありますが、この配列は 64K アイテムの長さであることが判明したため、静的イニシャライザーで初期化することは、{ x, y, z, ... }コードが乱雑になるため現実的ではありません。

代わりに、いくつかのループを使用してコードで初期化する必要があります。

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

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

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

私もこの配列を にしたいのですがconst、それを行う唯一の方法はstatic {}初期化ですよね?

4

2 に答える 2

6

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

于 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();

が必要ない場合は、C スタイルの配列よりも安全で効率が劣らない固定サイズの配列であるstd::vector参照してください(Boost doc によると)。TR1の一部です。TR1 に関する基本的な情報は、ウィキペディア( Boost の下のドキュメント) にあります。std::tr1::array

于 2011-11-12T23:38:40.597 に答える