タプルまたは可変長引数テンプレート パラメーターからの配列初期化子の作成
タプルまたは可変長引数テンプレート パラメーターから配列初期化子を作成するには、コンパイル時シーケンスを確立する必要があります。これは、可変個引数テンプレートを使用することで実現できます。
テンプレート宣言
まず、次のテンプレートを定義します。
<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...> {}; template<typename Key, Key identifier, typename Data> struct Entry {};</code>
レイアウトの累積
オフセットを累積するには、再帰ヘルパー関数を使用します。
<code class="cpp">template<std::size_t offset, typename Key, Key id0, typename D0, typename... Entries> struct LayoutHelper<offset, Key, Entry<Key, id0, D0>, Entries...> { typedef typename prepend < ProcessedEntry< Key, id0, D0, offset > , typename LayoutHelper<offset+sizeof(D0), Key, Entries...>::type >::type type; };</code>
使用法
この手法を使用するには、次の構文を使用してレイアウト仕様を指定します:
<code class="cpp">Layout< FooEnum, Entry< FooEnum, eFoo, char[10] >, Entry< FooEnum, eFoo2, double > > layout;</code>
レイアウト タプルを解凍した後、結果の配列を実行時のデータへのアクセスに使用できます。
以上がタプルまたは可変個引数テンプレート パラメーターから配列初期化子を作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。