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 :

Tableaux et autres std::vector


Sujet :

SL & STL C++

  1. #1
    Membre expérimenté Avatar de DeusXL
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 300
    Par défaut Tableaux et autres std::vector
    Voilà j'ais quelques questions sur les tableaux et std::vector ( cf le titre 8) ) :
    1] Existe-t-il en C++ un équivalent du foreach du C# ?
    Pour ceux qui ne conaissent pas foreach ça permet en gros de faire ça ( transposé en C++ ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int i[64];
    //On remplit i avec plein de valeurs
    foreach(int j in i)
    {
       j++;
    };
    Ce qui -vous l'aurez deviné- incrémente chaque entier contenu dans le tableau i...
    J'avais pensé ( utilisant les std::vector ) à faire une macro du genre :
    #define foreach(a, b) for(size_t i = 0; i < b.size(); i++) { a = b.at(i);

    Ce qui donnerait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    std::vector<int> i;
    //On remplit i avec plein de valeurs
    foreach(int j, i)
        j++;
    };
    (J'écris ça sans réellement savoir si ça peut marcher en fait).
    Y aurait-il un autre moyen de le faire ?

    2] Y aurait-il ( encore du C# ) un équivalent de l'opérateur is du C#...
    Par exemple j'ai une classe CObject, et deux classes héritées de CObject, CObjectV et CObjectH
    j'ai un objet CObject qui est peut être en fait un CObjectV ou CObjectH ( pas très clair ça ^^ ) et je voudrais savoir ce que c'est... En C# ( si mes souvenirs sont bons en C# je ferais :
    if(pObject is CObjectV)

    Là encore, j'ai fait une variable static dans chaque héritage qui indique de quelle classe il sagit... Mais y aurait-il un autre moyen ?

    3] Si on reprend mon exemple précédent avec CObject, et deux classes héritées de CObject, CObjectV et CObjectH.
    Je déclare une fonction OnUpdate() dans CObject qui fait référence à une autre fonction de CObject, OnIsUpdated() ...
    Que dans CObjectV et CObjectH je change cette fonction OnIsUpdated() sans toucher à OnUpdate(), qu'ensuite je fais un listing de tous mes CObject ( cela inclura les CObjectV et CObjectH ) et que je fais
    pObject->OnUpdate();
    Et bien quelque soit le type de pObject, il lancera OnIsUpdated() de CObject... Or je voudrais qu'il lance son propre OnIsUpdated() ...
    Pour remédier au problème, j'ai fait un cast basique du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(pObject->GetType() == OBJ_OBJECT) pObject->OnUpdate();
    else if(pObject->GetType() == OBJ_OBJECTV) ((CObjectV*)pObject)->OnUpdate();
    else if(pObject->GetType() == OBJ_OBJECTH) ((CObjectH*)pObject)->OnUpdate();
    et ça marche mais c'est un peu barbare et pas très zouli zouli... Y aurait-il là encore un autre moyen ?

    4] Question et un peu plus bizarre :
    si j'ai un tableau int i[64]; et que je veux obtenir dans une fonction le nombre d'élément que contient i... pourquoi :
    size_t len = sizeof(i) / sizeof(int);
    ne fonctionne-t-il pas ?

    5] Question sans aucun rapport ( bonne section ? ) :
    Dans tout jeu en réseau ou autre, lorsque que quelqu'un sur votre réseau LAN créé un serveur, vous le voyez immédiatement apparaître sur votre liste de serveur... Comment font-ils ? ( je ne demande pas de code précis... juste une petite idée ).

  2. #2
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    1] pas vraiment. Il y a for_each, qui est une fonction qui va accepter en dernier argument un objet fonction à appeler sur chaque élément.

    2] à priori tu as un mauvais design pour avoir besoin de cela. En C++ grâce aux templates on s'en passe normalement facilement. Tu peux mimer le is via dynamic_cast (tu mime plutot le as)
    http://c.developpez.com/faq/cpp/?pag...RS_downcasting

    3] si j'ai bien compris, il suffit simplement de déclarer OnIsUpdated() virtual.
    http://c.developpez.com/faq/cpp/?pag...NITION_virtual
    ce qui devrait résoudre le pourquoi de la question 2]

    4] si ton tableau est static ça devrait marcher. Sinon c'est juste la taille du pointeur que tu récupères:
    http://c.developpez.com/faq/cpp/?pag...taille_tableau

    5] broadcast UDP il me semble... "y'a-t-il un serveur ?" et chaque serveur répond.

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

Discussions similaires

  1. std vector vs tableaux
    Par mathher dans le forum SL & STL
    Réponses: 17
    Dernier message: 22/04/2006, 13h49
  2. std::sort() sur std::vector()
    Par tut dans le forum SL & STL
    Réponses: 20
    Dernier message: 05/01/2005, 19h15
  3. char[50] et std::vector<>
    Par tut dans le forum SL & STL
    Réponses: 9
    Dernier message: 12/10/2004, 13h26
  4. Réponses: 8
    Dernier message: 26/08/2004, 18h59
  5. Sauvegarde std::vector dans un .ini
    Par mick74 dans le forum MFC
    Réponses: 2
    Dernier message: 12/05/2004, 13h30

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