コンパイル時にプログラムで静的配列を作成する
C では、静的配列をコンパイル時に初期化して特定の値を保持できます。次の例を考えてみましょう。
const std::size_t size = 5; unsigned int list[size] = { 1, 2, 3, 4, 5 };
質問 1: プログラムによる値の割り当て
コンパイル時にメタプログラミング手法を使用して、これらの値をプログラム的に割り当てることは可能ですか?時間?
答え:
C 0x 機能を使用すると、テンプレートのローカル配列またはメンバー配列を作成し、可変長テンプレート引数リストから初期化することができます。ただし、これはテンプレートのインスタンス化の最大深さによって制限されており、大規模な配列では現実的ではない可能性があります。
質問 2: 選択的な割り当て
特定の配列要素には同じ値でも他の値は異なる場合、コンパイル時にプログラムで選択的な代入を実行できますか時間?
答え:
テンプレート メタ関数を使用すると、値の配列を作成し、それを使用して静的配列を部分的に初期化できます。次の例では、インデックスに基づいて値を選択的に割り当てます。
template<size_t index> struct MetaFunc { enum { value = index + 1 }; }; void test() { const std::size_t size = 7; typedef generate_array<size, MetaFunc>::result A; for (std::size_t i=0; i<size; ++i) { if (i <= 1 || i >= 4) { A::data[i] = 0; } } }
テンプレート メタ関数を活用することで、コンパイル時の評価を確実にしながら、プログラム的な方法で選択的な割り当てを実現できます。
以上がC のコンパイル時に静的配列をプログラムで初期化できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。