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 :

contenu de classe ou de structure modifiable ?


Sujet :

C++

  1. #1
    Nouveau membre du Club Avatar de legend666
    Étudiant
    Inscrit en
    Mars 2004
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2004
    Messages : 54
    Points : 39
    Points
    39
    Par défaut contenu de classe ou de structure modifiable ?
    Salut !

    Voila j' aimerais tout simplement savoir si tout d' abord c' est possible et si oui comment: faire le contenu d' un struct ou d' un class modifiable. J' ose imaginer un exemple:

    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
     
    cin >> i;
    if(i==1)
    {
        typedef struct
        {
            int x, y, z;
         }ex1;
    }else
    {
        typedef struct
        {
            int x, y, z, r, v, b;
         }
    }
    Mais malheureusement ce code ne marche pas !


    Merci d' avance

  2. #2
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 279
    Points : 11 011
    Points
    11 011
    Par défaut
    :-/ C'est pas bon.
    Que cherches-tu à faire ?
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  3. #3
    Membre éprouvé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Points : 1 054
    Points
    1 054
    Par défaut
    Habituèlement, on défini les deux types, et on choisi le quel des deux utiliser avec un cin...
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

  4. #4
    mat.M
    Invité(e)
    Par défaut
    Luc je crois qu'il cherche à faire ce qu'on appelle une "classe mutante" ; c.a.d changer les propriétés et méthodes en exécution ( "runtime")

    A moins de preuve du contraire c'est pas possible en C++ mais faisable je crois en Java.
    Parce qu'en c++ le code est ...compilé et il faut définir les types comme le suggère JCMaster

    Sinon le truc tout bête de base c'est l'héritage

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 34
    Points : 40
    Points
    40
    Par défaut
    En complément à ce qui a déjà été dit, à ma connaissance, la seule chose que tu as le droit de changer dans une classe sans avoir à modifier le source est le type des attributs ou des paramètres des méthodes. Va te renseigner du côté des template.

    Sinon, pour ton exemple, si tu veux juste changer le nombre des attributs sans en changer le type, il me semble que le plus simple est encore d'utiliser un pointeur et l'allocation dynamique, ou, mieux encore, les vecteurs (vector).

  6. #6
    Membre habitué
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 177
    Points : 196
    Points
    196
    Par défaut
    Ou alors la classe que tu utilise est une classe mère virtuel, et tu créera dans ton code l'une ou l'autre class dérivée. Mais bon, cette solution est plus pour les methodes que pour les membres.

    Avoir des membres variables de facon dynamique, il faudra toujours que le compilateur sache que tu utilise l'une ou l'autre class. Car avant ton test "cin >> i; if(i==1)" Il ne pourra pas verifier la syntaxe.

    Il existe bien le "dynamique cast" pour cela, mais est ce vraiment necessaire dans ce cas ?

    Peut etre une derniere solution sera d'avoir des code différent et passer via l'une ou l'autre DLL... Mais encore une fois ca semble se compliquer la vie pour pas grand chose. Si tu expliquerais le but de ton programme on pourrais peut-etre t'aider d'avantage.

  7. #7
    Nouveau membre du Club Avatar de legend666
    Étudiant
    Inscrit en
    Mars 2004
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2004
    Messages : 54
    Points : 39
    Points
    39
    Par défaut
    En fait, j' essaye d' utiliser les VBO d' OpenGL (cela sort quelque peu du form, mais bon...). Et pour les utiliser, j' ai besoin d' un tableau contenant toute les données de ma structure. Euh huhu conscient de ne pas être clair je donne un exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    typedef struct
    {
        float x, y, z;
        float uv, uw;
    }SVertex;
     
    SVertex tab[] = 
    {
    { 1.0, 0.0, -1.0, 1.0, -1.0},
    { -1.0, 0.0, 1.0, -1.0, 1.0}
    };
    Mias le problème est que je ne sais pas quel va être les données que ma structure contiendra pour l' envoyer à OpenGL: si, par exemple, dans l' exemple precedent, j' ai 3 données à rajouter à ma structure, comment faire ? Et l' idée de definir toute les structures me semble extravagente car OpenGL possède AU MINIMUM une vingtaine de possibilité !


    Merci d' avance

  8. #8
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 279
    Points : 11 011
    Points
    11 011
    Par défaut
    Citation Envoyé par mat.M
    Luc je crois qu'il cherche à faire ce qu'on appelle une "classe mutante" ; c.a.d changer les propriétés et méthodes en exécution ( "runtime")
    Ce que je veux qu'il nous dise, c'est où il veut en venir. Je ne m'intéresse pas à l'approche technique qu'il croit être la bonne.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  9. #9
    Membre éprouvé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Points : 1 054
    Points
    1 054
    Par défaut
    Comme dit précédament, utilise des vecteures, des listes de donées....

    Petit exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #include <map>
     
    typedef map<std::string, double> MyStruct
     
    int main()
    {
        MyStruct Objet;
        Objet.insert(MyStruct::value_type("y", -1));
        Objet.insert(MyStruct::value_type("x", 1));
        Objet.insert(MyStruct::value_type("z", 0.5));
        MyStruct::iterator ID Objet.find("y");
        if(ID != Objet.end())
          std::cout << " Nom : " << ID->first << "Val : " << ID->second;
    }
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

  10. #10
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Peut-être que ce tutoriel pourra te donner des pistes ou des idées ?

    http://loulou.developpez.com/tutorie...eur3d/partie3/

  11. #11
    Nouveau membre du Club Avatar de legend666
    Étudiant
    Inscrit en
    Mars 2004
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2004
    Messages : 54
    Points : 39
    Points
    39
    Par défaut
    Grace au tutorial donné par Loulou24, je suis arrivé sur cette page indiquant une manière simplissime pour gerer les VBO: http://www.devmaster.net/articles/oglVertexBuffer/.

    Ceci regle mon problème pour les struct, mais un nouveau arrive au galop:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      cout << mySize.size() << endl;
      gTable = new GLuint[mySize.size()];
      cout << "gT " << sizeof(gTable)/sizeof(GLuint) << endl;
    Ceci est sensé faire un tableau dynamique à la taille d' un vector mySize. Mais quelque soit la taille de mySize, sizeof(gTable)/sizeof(GLuint), ce qui egal je crois aux nombres de cases de gTable reste à un. Ce qui est le plus bizzarre c' est que je n' ai aucune segentation fault , juste rien ne s' affiche dans la fenetre OpenGL...


    Merci d' avance.

    ps: je ne savais plus trop quoi faire de ce topic, car il sort quelque peu de son sujet alors j' ai preferré continuer le même post[/code]

  12. #12
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 279
    Points : 11 011
    Points
    11 011
    Par défaut
    Tu ne peux pas obtenir la taille d'un tableau dynamique. C'est im-pos-si-ble! C'est à toi de la mémoriser. D'où l'intérêt d'utiliser des vecteurs qui la mémorisent pour toi.
    Et si tu utilises des fonctions qui attendent des pointeurs en paramètres, tu peux t'y prendre de la sorte:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void f(size_t s, int * p);
    ...
    std::vector <int> v;
    ...
    f(v.size(), &v[0]);
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  13. #13
    Nouveau membre du Club Avatar de legend666
    Étudiant
    Inscrit en
    Mars 2004
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2004
    Messages : 54
    Points : 39
    Points
    39
    Par défaut
    Ah oui tout simplement pas bête

    La donc je pense que c' est plus du côté d' OpenGL que sa butte. J' ai beau même essyer de faire des simples glBegin() glEnd(), rien ne s' affiche. Je vais donc m' en remettre au forum OpenGL

Discussions similaires

  1. Réponses: 8
    Dernier message: 21/12/2007, 16h42
  2. Réponses: 2
    Dernier message: 03/01/2007, 18h17
  3. [MySQL] Comment savoir si le contenu d'un champ a été modifié avant mise à jour
    Par lodan dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 02/12/2006, 12h05
  4. [c++] identification du contenu des classes
    Par TERRIBLE dans le forum C++
    Réponses: 5
    Dernier message: 13/10/2005, 08h30
  5. Comment séparer le contenu des pages de leur structure?
    Par djodjo dans le forum Général Conception Web
    Réponses: 7
    Dernier message: 06/05/2005, 14h48

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