Maison  >  Article  >  développement back-end  >  Comment construire un initialiseur de tableau statique à partir de tuples ou de modèles variadiques en C ?

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

Linda Hamilton
Linda Hamiltonoriginal
2024-10-28 02:17:31563parcourir

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

Pour utiliser cette approche :

<code class="cpp">Layout< FooEnum, Entry< FooEnum, eFoo, char[10]>, Entry< FooEnum, eFoo2, double> > layout;</code>

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!

Déclaration:
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