Maison > développement back-end > C++ > le corps du texte

Comment construire un initialiseur de tableau statique à partir de tuples ou de modèles variadiques en C ?

Linda Hamilton
Libérer: 2024-10-28 02:17:31
original
561 Les gens l'ont consulté

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

Création d'un initialiseur de tableau à partir d'un tuple ou de paramètres de modèle variadiques

Lorsque vous traitez des configurations de mémoire persistante qui doivent être intégrées dans le code du programme , il est nécessaire de représenter statiquement la description de la mise en page. Cela implique de lier un ID particulier à la mise en page, de calculer les décalages au moment de la compilation et de créer un initialiseur de tableau qui peut être itéré au moment de l'exécution sans les restrictions de std::get(std::tuple).

Approche de modèle variadique

Pour permettre l'accumulation et la création de séquences au moment de la compilation, envisagez d'utiliser des modèles variadiques. Chaque entrée peut être constituée d'un identifiant et de la taille ou du type d'un élément particulier. Le groupe d'entrées de niveau supérieur est défini comme un modèle « Mise en page » et chaque entrée est représentée par un modèle « Entrée ».

Exemple d'utilisation

<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>
Copier après la connexion
<code class="cpp">template<typename Key, Key identifier, typename Data>
struct Entry {};</code>
Copier après la connexion

Pour utiliser cette approche :

<code class="cpp">Layout< FooEnum, Entry< FooEnum, eFoo, char[10]>, Entry< FooEnum, eFoo2, double> > layout;</code>
Copier après la connexion

Après avoir implémenté le modèle de pré-ajout pour ajouter un élément au début d'un tuple, Layout::type contiendrait un tuple décrivant la disposition des données.

Considérations supplémentaires

  • L'extraction du tuple dans un std::array peut être réalisée à l'aide de l'astuce "index" ou de méthodes personnalisées qui exécutent la clé de compilation rechercher et renvoyer des informations de décalage et de taille.
  • L'utilisation d'alias peut aider à éliminer les noms de types répétés, tels que FooEnum.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!