J'ai une application qui utilise une méthode (dynamic_cast) pour connaître le type des données d’un vecteur. Je ne trouve pas cette méthode très élégante, mais je ne vois pas vraiment le moyen de faire autrement.
Pour résumer, une méthode doit faire l'opération A ou B selon le type de objet. L'opération A et B ne concerne en rien les objets, on ne peut donc pas implémenter virtual objet.opération A.opération et B.opération comme solution.
Voici un example de ce que je veux illustrer :
Code :
// compiler avec /GR visual studio .NET 2003
#include <iostream>
#include <vector>
using namespace std;
class Objet
{
public:
virtual ~Objet()
{
}
};
class Cube : public Objet
{
};
class Triangle : public Objet
{
};
void CubeTriangle(int& cube, int& triangle, vector<Objet*>& vecObjet)
{
cube = 0;
triangle = 0;
for (unsigned int index = 0; index < vecObjet.size(); ++index)
{
if (dynamic_cast<Cube*>(vecObjet[index]) != NULL)
{
cube++;
}
else if (dynamic_cast<Triangle*>(vecObjet[index]) != NULL)
{
triangle++;
}
}
}
int main()
{
vector<Objet*> vecObjet;
vecObjet.push_back(new Triangle());
vecObjet.push_back(new Triangle());
vecObjet.push_back(new Cube());
vecObjet.push_back(new Triangle());
vecObjet.push_back(new Cube());
int cube, triangle;
CubeTriangle(cube, triangle, vecObjet);
cout << "cube : " << cube << endl;
cout << "triangle : " << triangle << endl;
// cleanup
for (unsigned int index = 0; index < vecObjet.size(); ++index)
{
delete vecObjet[index];
}
}
Dans cette exemple, on veut compter les nombres d'objet de type cube et de type triangle. Vous voyez une autre façon de faire ?