C でタプルまたは可変長引数テンプレートから静的配列初期化子を構築する方法

Linda Hamilton
リリース: 2024-10-28 02:17:31
オリジナル
561 人が閲覧しました

How to Build a Static Array Initializer from Tuples or Variadic Templates in C  ?

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

プログラム コード内に埋め込む必要がある永続メモリ レイアウトを扱う場合、レイアウトの説明を静的に表現する必要があります。これには、特定の 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::type にはデータ レイアウトを記述するタプルが含まれます。

その他の考慮事項

  • タプルを std::array に抽出するには、「インデックス」トリックまたはコンパイル時にキーを実行するカスタム メソッドを使用します。検索して、オフセットとサイズの情報を返します。
  • エイリアスを使用すると、FooEnum などの型名の繰り返しを排除できます。

以上がC でタプルまたは可変長引数テンプレートから静的配列初期化子を構築する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!