


Les techniques de métaprogrammation C 0x peuvent-elles être utilisées pour attribuer par programme des valeurs à des tableaux statiques au moment de la compilation ?
Dec 05, 2024 am 06:09 AMGénérer par programmation des tableaux statiques au moment de la compilation en C
Étant donné la possibilité de définir des tableaux statiques au moment de la compilation en C, est-il possible de attribuer leurs valeurs par programmation à l'aide de techniques de métaprogrammation ?
Question 1 : Programmatique Affectation des valeurs du tableau
Oui, en utilisant les fonctionnalités C 0x, il est possible d'initialiser les éléments du tableau "par programme" au moment de la compilation. Prenons l'exemple suivant :
template<unsigned... args> struct ArrayHolder { static const unsigned data[sizeof...(args)]; }; template<unsigned... args> const unsigned ArrayHolder<args...>::data[sizeof...(args)] = { args... };
Question 2 : attribution sélective des valeurs du tableau
En supposant que le tableau contient des valeurs récurrentes à quelques exceptions près, il est possible d'attribuer sélectivement valeurs par programme :
template<size_t N, template<size_t> class F, unsigned... args> struct generate_array_impl { typedef typename generate_array_impl<N-1, F, F<N>::value, args...>::result result; }; template<template<size_t> class F, unsigned... args> struct generate_array_impl<0, F, args...> { typedef ArrayHolder<F<0>::value, args...> result; }; template<size_t N, template<size_t> class F> struct generate_array { typedef typename generate_array_impl<N-1, F>::result result; };
Utilisation du tableau avec des zéros récurrents sauf pour les éléments 2 et 3 :
template<size_t index> struct MetaFunc { enum { value = index == 2 || index == 3 ? index + 1 : 0 }; }; void test() { const size_t count = 7; typedef generate_array<count, MetaFunc>::result A; for (size_t i=0; i<count; ++i) std::cout << A::data[i] << "\n"; }
Bien que ces solutions soient limitées par la profondeur maximale d'instanciation des modèles, elles démontrent le potentiel de C 0x pour la création et l'initialisation de tableaux programmatiques.
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!

Article chaud

Outils chauds Tags

Article chaud

Tags d'article chaud

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

C Fonction Langue Format de lettre ÉTAPES DE CONVERSION DE CAS

Gulc: Cibliothèque C construite à partir de zéro

Quels sont les types de valeurs renvoyées par les fonctions du langage C? Qu'est-ce qui détermine la valeur de retour?

Comment fonctionne la bibliothèque de modèle standard C (STL)?

Quelles sont les définitions et les règles d'appel des fonctions du langage C et quelles sont les

Où est la valeur de retour de la fonction de langue C stockée en mémoire?

Utilisation distincte et partage de phrases

Comment utiliser efficacement les algorithmes du STL (trier, trouver, transformer, etc.)?
