Je réalise un projet en convertissant du code Pascal (Delphi) en C++ et j'aimerais écrire une fonction qui est à peu près équivalente au Pascal "SetLength" méthode. Cela prend une référence à un tableau dynamique, ainsi qu'une longueur et alloue la mémoire et renvoie la référence.Une méthode générique pour définir la longueur d'un tableau dynamique de type arbitraire en C++
En C++, je pensais à quelque chose le long des lignes de
void* setlength(void* pp, int array_size, int pointer_size, int target_size, ....) {
void * p;
// Code to allocate memory here via malloc/new
// something like: p = reinterpret_cast<typeid(pp)>(p);
// p=(target_size) malloc(array_size);
return p;
}
Ma question est la suivante: est-il un moyen de passer le type de pointeur à une fonction comme celui-ci et d'allouer avec succès la mémoire (peut-être via un paramètre de typeid?)? Puis-je utiliser
<reinterpret_cast>
en quelque sorte? Le but ultime serait quelque chose comme ce qui suit en termes d'utilisation:
float*** p;
p=setlength(100,sizeof(float***),sizeof(float**),.....);
class B;
B** cp;
cp=setlength(100,sizeof(B**),sizeof(B*),.....);
Toute aide serait la bienvenue. Je suis conscient que mon code suggéré est tout faux, mais je voulais transmettre l'idée générale. Merci.
Je ne les appellerais certainement pas des monstruosités, elles donnent une manière beaucoup plus intuitive d'accéder à des structures de données multidimensionnelles. Cela étant dit, vous pouvez perdre une partie de la performance en comparaison avec la dimension majeure du tableau linéaire. – DeusAduro
C'est ce que j'utilise en ce moment, mais je me demandais s'il y avait un moyen de mettre toutes les vérifications d'exception en un seul endroit sur l'allocation. Mon application utilise beaucoup de tableaux 3D où l'indirection triple est (hélas) nécessaire –
beaucoup plus intuitive que quoi? – jalf