C では、
const std::size_t size = 5; unsigned int list[size] = { 1, 2, 3, 4, 5 };
質問 1: プログラマティックな価値割り当て
メタプログラミング技術を利用して、コンパイル時にプログラム的にこれらの要素に値を割り当てることができますか?答え:
C 0x は、テンプレート可変引数の概念。可変数の引数から配列を初期化できます。ただし、テンプレートのインスタンス化の深さにより、大規模な配列に対するこのアプローチの実用性は制限されます。質問 2: 選択的な値の割り当て
ほとんどの配列要素が同じであると仮定すると、値は次のようになります。コンパイル時にプログラム的に選択的に割り当てられる時間?答え:
より洗練されたアプローチでは、C 0x メタ関数とテンプレートの特殊化を利用して、値が散在する配列を生成します。これには、要素値を定義するための再帰的テンプレート structgenerate_array とカスタム メタ関数 MetaFunc が含まれます。template<size_t index> struct MetaFunc { enum { value = index + 1 }; }; void test() { const size_t count = 5; typedef generate_array<count, MetaFunc>::result A; for (size_t i=0; i<count; ++i) std::cout << A::data[i] << "\n"; }このソリューションには再帰的テンプレートのインスタンス化が含まれ、テンプレートの深さの制限によりサイズが制限された配列に適しています。
以上がメタプログラミング技術を使用して、C のコンパイル時に静的配列にプログラムで値を割り当てることはできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。