Maison >développement back-end >C++ >Comment calculer les décalages automatiques de tableau à l'aide de modèles variadiques en C ?

Comment calculer les décalages automatiques de tableau à l'aide de modèles variadiques en C ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-02 21:58:30596parcourir

How do you calculate automatic array offsets using variadic templates in C  ?

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

Les modèles variadiques offrent une solution au besoin de calcul automatique du décalage lors de l'initialisation du tableau . En représentant chaque élément sous la forme d'un identifiant et de sa taille, une séquence peut être créée qui pilote le calcul des décalages.

Une structure de mise en page est utilisée pour contenir les entrées :

<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>

Chaque entrée a un identifiant et un type ou une taille :

<code class="cpp">template<typename Key, Key identifier, typename Data>
struct Entry {};</code>

Pour créer une entrée traitée, nous étendons le concept :

<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;
};</code>

L'utilisation ressemble à ceci :

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

Après avoir trouvé une implémentation de pré-ajout qui ajoute des éléments au début d'un tuple, Layout::type représentera un tuple qui exprime la disposition des données. Ce résultat peut ensuite être utilisé pour construire un std::array en décompressant les entrées à l'aide de la technique des index.

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