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