Je ne sais pas s'il est très bon d'avoir deux types différents dans un TList mais c'est une autre affaire. Je ne crois pas que les int et AnsiString soient des TObject au sens de la VCL.
Si donc vous n'avez que des pointeurs d'AnsiString et d'int, le mieux est de créer une méthode, appelons-la tryAnsiString, qui dira si l'adresse donnée en argument pointe ou non un AnsiString. Donc vous déclarez cette méthode booléenne dans la classe principale.
bool __fastcall tryAnsiString(void*);
On peut programmer ainsi cette méthode.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| bool __fastcall TForm1::tryAnsiString(void* V)
{
bool OK=true;
try
{
AnsiString* B=(AnsiString*)(V);
AnsiString C=*B;
}
catch(...)
{
OK=false;
}
return OK;
} |
Dans ces conditions, si i est un indice valide dans la TList, il suffira d'écrire
1 2 3 4 5 6 7 8
| if(tryAnsiString(l->Items[i]))
{
// c'est un AnsiString
}
else
{
// c'est un int
} |
Attention, C++ Builder n'aime pas trop qu'on fasse du pas à pas avec des try/catch, il y a des précautions à prendre, le mieux est de tester hors C++ Builder en cliquant l'icône juste après compilation.
À bientôt
Gilles
Partager