ホームページ  >  記事  >  バックエンド開発  >  タプルまたは可変個引数テンプレート パラメーターから配列初期化子を作成するにはどうすればよいですか?

タプルまたは可変個引数テンプレート パラメーターから配列初期化子を作成するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-27 16:08:02816ブラウズ

How to Create Array Initializers from Tuple or Variadic Template Parameters?

タプルまたは可変長引数テンプレート パラメーターからの配列初期化子の作成

タプルまたは可変長引数テンプレート パラメーターから配列初期化子を作成するには、コンパイル時シーケンスを確立する必要があります。これは、可変個引数テンプレートを使用することで実現できます。

テンプレート宣言

まず、次のテンプレートを定義します。

<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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。