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!