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

SL & STL C++ Discussion :

Je suppose que les templates dynamiques n'existent pas..


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Par défaut Je suppose que les templates dynamiques n'existent pas..
    Je voudrais faire quelque chose comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    template <int keysize>
    struct MaClasse
    {
     long s_offset,s_length;
     char s_key[keysize];
    };
     
    void foo(int keysize)
    {
    MaClasse<keysize> *p=new MaClasse<keysize>();
    ...
    }
    Je rêve de pouvoir déclarer des structures dont la taille serait définie au runtime et non à la compilation.

    On peut le gérer soi-même mais c'est un peu casse-gueule:
    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
    struct MaClasse
    {
     long s_offset,s_length;
     //char s_key[...];
    };
     
    void foo(int keysize)
    {
    char *t_ptr=new char[sizeof(MaClasse)+keysize];
    MaClasse *p=new(t_ptr) MaClasse();
    ...
    p->s_offset=0;
    p->s_length=327
    strcpy((char *)(p+1),"abcdef");
    }
    Une aide du langage serait bienvenue.

  2. #2
    Membre chevronné
    Avatar de Florian Goo
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    680
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 680
    Par défaut
    Tu supposes bien

    Plus besoin de gérer des tableaux dynamiques manuellement comme il fallait le faire en C.
    En C++, on utilise les conteneurs de la STL, à savoir std::vector, std::list et d'autres. C'est bien plus sympa à utiliser que les tableaux en C, un grand bol d'air !

    EDIT : Et std::string pour les chaines de caractères.
    Cours : Initiation à CMake
    Projet : Scalpel, bibliothèque d'analyse de code source C++ (développement en cours)
    Ce message a été tapé avec un clavier en disposition bépo.

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Par défaut
    Je crois que tu ne m'as pas compris...
    La stl c'est bien quand tout est défini à la compilation.
    Je souhaite aller au-delà.

    Relis bien mon premier morceau de code avec template <int keysize>.

  4. #4
    Membre chevronné
    Avatar de Florian Goo
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    680
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 680
    Par défaut
    Ce que tu veux faire n'est pas réalisable : un argument template doit être constant et défini à la compilation.

    J'ai compris que tu voulais un tableau dont la taille est déterminée à l'exécution. Un tel tableau s'appelle un conteneur, ce que la STL implémente.

    C'est bien ça que tu voulais savoir ?
    Cours : Initiation à CMake
    Projet : Scalpel, bibliothèque d'analyse de code source C++ (développement en cours)
    Ce message a été tapé avec un clavier en disposition bépo.

  5. #5
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Par défaut
    Je voudrais définir des "structures" de taille variable et dépourvue de pointeurs (implicites ou explicites). Un conteneur peut contenir plein de pointeurs implicites.
    Pourquoi ? Pour pouvoir fair ceci par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    MaClasse<keysize> mc;
    ...
    ReadFile(&mc,sizeof(MaClasse<keysize>));
    ...
    WriteFile(&mc,sizeof(MaClasse<keysize>));
    Un truc comme ceci par exemple est inutile:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    std::string s;
    ...
    ReadFile(&s,sizeof(std::string));
    ...
    Bref, en attendant une hypothétique extension du langage, comment gérer des flux binaires "extérieurs" ?

  6. #6
    Membre chevronné
    Avatar de Florian Goo
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    680
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 680
    Par défaut
    Un argument template doit être connu à la compilation. En gros, le template d'une classe va générer implicitement autant de classes qu'il existe de combinaisons de valeur d'arguments. Ce n'est donc pas un manque du langage, aucune extension dans aucun langage de programmation ne pourra changer cela.

    Pour la gestion des flux, tu trouveras peut-être ton bonheur ici : http://cpp.developpez.com/faq/cpp/?page=SL
    Cours : Initiation à CMake
    Projet : Scalpel, bibliothèque d'analyse de code source C++ (développement en cours)
    Ce message a été tapé avec un clavier en disposition bépo.

  7. #7
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Citation Envoyé par camboui Voir le message
    Je voudrais définir des "structures" de taille variable et dépourvue de pointeurs (implicites ou explicites). Un conteneur peut contenir plein de pointeurs implicites.
    Pourquoi ? Pour pouvoir fair ceci par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    MaClasse<keysize> mc;
    ...
    ReadFile(&mc,sizeof(MaClasse<keysize>));
    ...
    WriteFile(&mc,sizeof(MaClasse<keysize>));
    Un truc comme ceci par exemple est inutile:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    std::string s;
    ...
    ReadFile(&s,sizeof(std::string));
    ...
    Bref, en attendant une hypothétique extension du langage, comment gérer des flux binaires "extérieurs" ?
    Vive la sérialisation. Regarde ce que Boost propose, tout est automatique.

Discussions similaires

  1. Réponses: 8
    Dernier message: 01/02/2013, 15h20
  2. selectionner les numéros qui n'existent pas
    Par Invité dans le forum Requêtes
    Réponses: 2
    Dernier message: 01/11/2011, 22h41
  3. Pourquoi les objets courbés n'existent pas ?
    Par bricechris dans le forum Moteurs 3D
    Réponses: 24
    Dernier message: 09/05/2011, 09h09
  4. Afficher les liens qui n'existent pas
    Par engi dans le forum Langage SQL
    Réponses: 5
    Dernier message: 16/10/2008, 20h37
  5. Réponses: 4
    Dernier message: 23/05/2007, 09h51

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