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 :

templates d'extension sizeof


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Par défaut templates d'extension sizeof
    Salut,

    Je voudrais faire un fichier templates pour étendre les possibilités de sizeof, sauf si ça existe déjà (j’ai bien vu typeid de "typeinfo", mais c'est résolu à l'exécution, je crois) par taille du type de base, en taille-mémoire, en nombre d'éléments.

    J'ai juste fait ça pour l'instant. Mais avant de continuer, j'aimerais savoir s'il existe quelle chose qui va dans ce sens.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    template <typename T>
    size_t sizeof_type(const T *base_variable){
      return sizeof(T);
    }
     
    template <typename T>
    size_t sizeof_type(const T &base_variable){
      return sizeof(T);
    }
     
     
    int main(){
     
      int t;
      wcout<< sizeof(int)<< endl;
      wcout<< sizeof_type(t)<< endl;
     
    ...
    }

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 533
    Par défaut
    J'ai l'habitude de me faire des petites routines pour manipuler plus facilement les tableaux C. Si ça peut aider...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    template <typename Type, size_t Size>
    inline size_t length_of(const Type(&)[Size]) { return Size; }
     
    template <typename Type, size_t Size>
    inline Type* end_of(Type(&a)[Size]) { return a + length_of(a); }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int tab[42];
     
    // tab peut changer de taille sans perturber cet appel
    std::sort( tab, end_of(tab) );

  3. #3
    Membre Expert
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Par défaut
    Salut,

    Merci pour ta réponse. Tu penses qu'on pourrait se faire un header complet pour lequel une simple inclusion serait suffisante pour bénéficier de ces facilités, comme il ne semble pas exister quelque chose de fait et éprouvé ?

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 533
    Par défaut
    En fait je me demande si ça n'existe pas déjà dans Boost.Fusion.

  5. #5
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Doubs (Franche Comté)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Par défaut
    Bonjour,

    Je suis pas certain d'aboir compris ce que tu cherches à faire, mais ton exemple ne sert à rien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #include<iostream>
     
    int main() 
    {
    	int t;
    	std::cout << sizeof(t);
    }
    Est parfaitement valide.

    Les fonctions présentées par cob59 sont déjà plus utiles. En ajoutant un constexpr en C++11.

    Je ne crois pas qu'il y est directement cette fonction dans boost (peut-être dans un scope detail). Cependant ce n'est pas si utile :
    -> Si on veut travailler sur un tableau statique alors on écrit directement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    template<class T, size_t N>
    R foo(T (&tab)[N]) { /*code*/ }
    -> Sinon il y a ca : http://www.boost.org/doc/libs/1_49_0...ce/extent.html qui est maintenant présent dans la biblitohèque standard (dans <type_traits>).

  6. #6
    Membre émérite
    Avatar de Ekleog
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 448
    Par défaut
    Je crois que l'objectif est de déterminer la taille totale prévue à l'exécution, style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class A {
       int a;
       double b;
    };
    class B {
       A * a;
    };
     
    // ...
    full_sizeof(B()); // sizeof(B) + sizeof(A) (car B contient un A*)
    Sauf que, dès qu'il y a un membre privé, ce sera impossible en non-intrusif. (Enfin, je crois !)

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

Discussions similaires

  1. Extension de template
    Par jacques_randolph dans le forum Odoo (ex-OpenERP)
    Réponses: 1
    Dernier message: 24/02/2014, 14h26
  2. [eZ Publish] extensions eZ Publish, templating et left menu
    Par Samir-1975 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 30/01/2012, 10h29
  3. [Joomla!] Problème dans l'installation du template Ja Purity II et d'autres extensions
    Par youza dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 26/04/2010, 10h59
  4. Comment récupérer le nom du fichier sans l'extension ?
    Par altahir007 dans le forum Langage
    Réponses: 16
    Dernier message: 13/11/2009, 13h20
  5. [XSLT] template
    Par demo dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 09/09/2002, 11h31

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