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

Langage C++ Discussion :

Récupérer la dimension d'un tableau statique à partir d'un prototype de fonction.


Sujet :

Langage C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 12
    Points : 13
    Points
    13
    Par défaut Récupérer la dimension d'un tableau statique à partir d'un prototype de fonction.
    Bonjour,

    J'ai une fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void f(double tab[2]) {}
    Est-il possible de retrouver la dimension du tableau statique, à savoir 2, à partir du type de la fonction ?

    Il est possible de déduire la dimension d'un tableau statique avec une spécialisation template:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      template<class> struct Size;
      template<class T, size_t N> struct Size < T[N] > { enum { value = N };};
      std::cout << " size  = " << Size<double[2]>::value << std::endl; // --> 2
    Toutefois, je n'arrive pas à le retrouver à partir du type de la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    template<class> struct Traits;
     
    template<class X, size_t N> struct Traits< void (X[N])>
    {
      enum {value = N };
    };
     
    std::cout << " size  = " << Traits<decltype(f)>::value << std::endl;
    ce qui donne l'erreur suivante :
    error: template parameters not deducible in partial specialization:
    template<class X, size_t N> struct Traits< void (X[N])>
    Donc je ne sais pas si c'est possible ... des idées ?

  2. #2
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 739
    Points : 3 627
    Points
    3 627
    Par défaut
    Normal, f ne prend pas un tableau mais un pointeur. Bienvenu dans le monde merveilleux où les tableaux dans les prototypes.de fonctions ne sont en réalités que des pointeurs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    f(double[2])
    f(double[434])
    f(double[])
    f(double*)
    Sont la même fonction.

    Si vous voulez un tableau il faut le prendre par référence.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    f(double (&x)[N]);
     
    template<class> struct Traits;
     
    template<class R, class X, size_t N> struct Traits<R(X(&)[N])>
    {
      static const size_t value = N;
    };
     
     
    Traits<decltype(f)>::value == 2

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 12
    Points : 13
    Points
    13
    Par défaut
    Compris, merci beaucoup !

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

Discussions similaires

  1. Récupérer une partie d'un tableau à 3 dimensions
    Par grinder59 dans le forum Langage
    Réponses: 2
    Dernier message: 05/03/2009, 10h23
  2. Réponses: 3
    Dernier message: 14/01/2009, 08h31
  3. Récupérer l'adresse d'un tableau à deux dimensions
    Par GSébastien dans le forum Débuter
    Réponses: 5
    Dernier message: 19/09/2008, 16h23
  4. cree tableau a partir de 2 autres tableaux de differents dimensions
    Par djilali22 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 15/10/2007, 12h29
  5. dimension d'un tableau d'entier statique
    Par rare1 dans le forum C
    Réponses: 6
    Dernier message: 30/08/2006, 17h55

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