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 ).