Maison > développement back-end > C++ > Comment créer des initialiseurs de tableau à partir de paramètres de modèle de tuple ou variadique ?

Comment créer des initialiseurs de tableau à partir de paramètres de modèle de tuple ou variadique ?

Patricia Arquette
Libérer: 2024-10-27 16:08:02
original
931 Les gens l'ont consulté

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

Création d'initialiseurs de tableau à partir de paramètres de modèle tuple ou variadique

Afin de créer des initialiseurs de tableau à partir de paramètres de modèle tuple ou variadique, un processus de compilation la séquence doit être établie, ce qui peut être réalisé grâce à l'utilisation de modèles variadiques.

Déclarations de modèles

Tout d'abord, définissez les modèles suivants :

<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>
Copier après la connexion

Accumulation de mise en page

Pour accumuler des décalages, utilisez une fonction d'assistance récursive :

<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>
Copier après la connexion

Utilisation

Pour utilisez cette technique, fournissez une spécification de mise en page en utilisant la syntaxe suivante :

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

Après avoir décompressé le tuple de mise en page, le tableau résultant peut être utilisé pour accéder aux données au moment de l'exécution.

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