Maison > développement back-end > C++ > 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 ?

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 ?

Linda Hamilton
Libérer: 2024-12-05 06:09:10
original
689 Les gens l'ont consulté

Can C  0x Metaprogramming Techniques be Used to Programmatically Assign Values to Static Arrays at Compile Time?

Gé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... };
Copier après la connexion

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

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

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!

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