IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Initialisation de la taille d'un std::array par metaprogrammation: echec


Sujet :

C++

  1. #1
    Membre régulier
    Profil pro
    System Integration Project Manager
    Inscrit en
    Octobre 2006
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : System Integration Project Manager
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 219
    Points : 112
    Points
    112
    Par défaut Initialisation de la taille d'un std::array par metaprogrammation: echec
    Bonjour,

    je veux initialiser la taille d'une std::array a la compilation en fonction d'une valeur.
    Pour cela j'ai ecrit le code suivant qui calcule la taille du tableau a la compilation par metaprog

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    namespace details {
     
    //! compute number of coefficients wrt to DEGREE of correction polynoms at compile time using metaprogramming
    template <unsigned int DEGREE>
    struct NbCoeffs {
        enum { value = DEGREE+1+NbCoeffs<DEGREE-1>::value};
    };
     
    template <>
    struct NbCoeffs<0> {
        enum { value = 1 };
    };
     
    };
    Je veux l'utiliser dans le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    template <unsigned int DEGREE=3>
    class A
    {
    protected :
    	//! enum to memorize the degree of the polynoms
    	typedef enum {
    		Degree = DEGREE;
    	};
     
    	//! internal array: fix-size compile-time arrays
    	typedef std::array<double,details::NbCoeffs<DEGREE>> InternalArrayType;
    };
    mais le compilo de Visual Studio 10 se plaint en me disant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    error C2975: 'std::tr1::array' : invalid template argument for '_Size', expected compile-time constant expression
    1>          C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\array(18) : see declaration of 'std::tr1::array'
    il me semble que l'expression details::NbCoeffs<DEGREE> doit etre evaluée a la compil .. je ne comprends pas le compilo du coup...

    Quelqu'un a une idée ?

    Merci

    V

  2. #2
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 620
    Points
    15 620
    Par défaut
    Bonjour

    Il te manque ton "value" a priori
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef std::array<double,details::NbCoeffs<DEGREE>::value> InternalArrayType;

  3. #3
    Membre régulier
    Profil pro
    System Integration Project Manager
    Inscrit en
    Octobre 2006
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : System Integration Project Manager
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 219
    Points : 112
    Points
    112
    Par défaut
    Citation Envoyé par gbdivers Voir le message
    Bonjour

    Il te manque ton "value" a priori
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef std::array<double,details::NbCoeffs<DEGREE>::value> InternalArrayType;
    Non mais quel c.... Je viens de le voir et ca finit de compiler... Voila ce que c est de vouloir faire vite qd on est fatigue

    Merci et desole de vous avoir embeter...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. taille d'une std::string
    Par ZeNoob dans le forum SL & STL
    Réponses: 3
    Dernier message: 19/05/2012, 11h06
  2. Performances std::array C++ 2011 vs C array
    Par Kaluza dans le forum Langage
    Réponses: 6
    Dernier message: 07/12/2011, 18h15
  3. Question sur la classe std::array
    Par Aleph69 dans le forum C++
    Réponses: 4
    Dernier message: 07/07/2011, 17h49
  4. [Tableaux] Une taille limite pour un array ?
    Par Xunil dans le forum Langage
    Réponses: 12
    Dernier message: 05/12/2006, 14h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo