Maison  >  Article  >  développement back-end  >  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
Patricia Arquetteoriginal
2024-10-27 16:08:02816parcourir

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>

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>

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>

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!

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