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
Libérer: 2024-11-02 21:58:30
original
586 Les gens l'ont consulté

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

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

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

L'utilisation ressemble à ceci :

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

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!

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