définition d'une structure dynamique [C] - C - Programmation
Marsh Posté le 02-06-2004 à 14:51:02
tu ne peux pas. enfin pas simplement.
vite fais si ça te satisfait, tu peux jouer avec une union + enum
sinon, c'est des couches genre Glib ou OOC
Marsh Posté le 02-06-2004 à 15:04:06
ok vais me renseigner sur le sujet. de toute façon j'ai le temps donc bah si il y a un moyen autant en profiter car je risque de devoir utiliser une dizaine de type différent avec des fonctions qui ne changent pas vraiment à l'exception des types des variables
Marsh Posté le 02-06-2004 à 15:04:57
bah si tu en connais le nombre, la solution union + enum ça peut te satisfaire
Marsh Posté le 02-06-2004 à 15:05:56
euh question bête et méchante : c quoi Glib et OOC ?
Marsh Posté le 02-06-2004 à 15:07:33
une pseudo couche objet, OOC est un peu marginal mais facile à utiliser et performant.
Marsh Posté le 02-06-2004 à 15:10:19
en fait non je connais pas vraiment. ça pourra varier d'un problème à l'autre. ça dépend de ce que les biologiste veulent. je pourrais a avoir à stocker des vitesses, des biomasses, des hauteurs d'eau, une bathymétrie...
ors c'est tjrs stocké dans un fichier texte mais avec des colonnes différentes.
et si un jour j'ai besoin de rajouter une nouvelle couches d'information de n'avoir juste qu'à créer un fichier h avec la structure de la nouvelle couche
Marsh Posté le 02-06-2004 à 16:25:43
en utilisant un pointeur générique (void *) je pourrais pointer vers n'importe quel type de structure ? c'est à dire pointer par exemple vers un int ** ou un float **
et donc si je le mes en paramètre dans la déclaration de mes fonctions je pourrais passer un peu près n'importe quoi dedans (tant qu'à l'intérieur de ces dernières je fasse attention aux incompatibilité de type).
C'est bien ça ? (c'est des notions totalement nouvelles qu'on apprend pas du tout à l'iut)
Marsh Posté le 02-06-2004 à 16:41:40
bon j'ai rien dit sur le site :
http://flenu.ise-mons.be/cours/rappel/pointdef.php
bah ils disent c bon juste pour de l'affectation. donc j'en conclue qu'on ne peut pas mettre ça pour de la déclaration de fonction
Marsh Posté le 02-06-2004 à 16:50:28
ah ouais mais attend, si tu veux stocker des données, c'est encore plus simple : union + enum, tu écris également l'énum et pan t'as le type de ta donnée
Marsh Posté le 02-06-2004 à 17:11:48
l'union permet de choisir tel ou tel type. ce qui implique donc de connaitre le type à l'avance. mais si je mes la structure dans un fichier à part je n'aurai donc qu'à modifier cette dernière pour modifier (ajouter ou supprimer) un type. Ensuite pour l'utilisation si mes types sont des pointeurs je peux donc allouer dynamiquement l'espace et pas perdre de place et avec l'union je sélectionne dans chaque fonctions quelle partie de ma structure je dois utiliser.
Donc au final si j'utilise un union dans ma structure suivante :
Code :
|
à la place float ** tabCoordonnees;
je pourrais donc au choix prend un int ** ou un mixte de tableau d'entier et de char * (qu'il faudra que j'inclue dans la déclaration bien sur)
bref je pourrais un peu tout faire c bien ça ? (à condition de prévoir les test pour savoir quelles sont les types utilisés à l'intérieur de mes fonctions).
Marsh Posté le 02-06-2004 à 17:15:04
grande question aussi :
l'union correspond donc à un OU
mais dans l'attribution de la mémoire si je choisis à un moment ou un autre de changer de type ne risque t-il pas de réécrire par dessus des valeurs correspondant à un élément précédemment sélectionné de l'union ?
Marsh Posté le 02-06-2004 à 17:27:17
c'est à dire que si j'ai :
patate.autruche = 10
puis patate.tanga = 20
je perderai patate.autruche ?
(bon en même temps je crois que ça ne génerais pas --> va réfléchir à ce problème ce soir en rentrant de son stage)
Marsh Posté le 04-06-2004 à 06:49:27
Code :
|
un exemple simple
attention
e.x = ...;
... = e.y;
est indéfini
Marsh Posté le 02-06-2004 à 14:47:39
Bon voila je me pose la question suivante :
je dois définir une structure qui sera presque tjrs identique à l'exception de un ou deux paramètres.
ors si je me trompe pas mes fonctions écrites pour un type ne seront pas compatibles avec un autre type.
Je voudrais donc savoir si on peut spécifier un Type général qu'on pourrait ensuite spécialiser par exemple en incluant des fichier h avec les nouvelles spécificités (sans modifier les fonctions).
Je sais qu'en ADA c possible par exemple sur les fichiers où on spécifie à l'écriture du code quels sont les types de fichier qu'on va ouvrir (fichier d'entier, d'enregistrement complexes...). Je voudrais faire la même chose mais avec des objets en mémoires.
voila j'espère avoir été assez claire.
---------------