タプルまたは可変長引数テンプレート パラメーターからの配列初期化子の作成
プログラム コード内に埋め込む必要がある永続メモリ レイアウトを扱う場合、レイアウトの説明を静的に表現する必要があります。これには、特定の ID をレイアウトにバインドし、コンパイル時にオフセットを計算し、std::get(std::tuple) の制限なしで実行時に反復できる配列初期化子を作成することが含まれます。
可変個引数テンプレートのアプローチ
コンパイル時の蓄積とシーケンスの作成を有効にするには、可変個引数テンプレートの使用を検討してください。各エントリは、識別子と、特定の要素のサイズまたはタイプのいずれかで構成されます。エントリの最上位バンドルは「レイアウト」テンプレートとして定義され、各エントリは「エントリ」テンプレートによって表されます。
使用例
<code class="cpp">template<std::size_t offset, typename Key, typename... Entries> struct LayoutHelper { typedef std::tuple<> type; }; template<typename Key, typename... Entries> struct Layout:LayoutHelper<0, Key, Entries...>;</code>
<code class="cpp">template<typename Key, Key identifier, typename Data> struct Entry {};</code>
このアプローチを使用するには:
<code class="cpp">Layout< FooEnum, Entry< FooEnum, eFoo, char[10]>, Entry< FooEnum, eFoo2, double> > layout;</code>
prepend テンプレートを実装してタプルの先頭に要素を追加した後、Layout
その他の考慮事項
以上がC でタプルまたは可変長引数テンプレートから静的配列初期化子を構築する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。