begin process at 2012 05 29 03:15:22
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Général

 > 

[C] Généricité et cast automatique.


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

[C] Généricité et cast automatique.

mardi 9 janvier 2007 à 00:11:17 | [C] Généricité et cast automatique.

LocalStone

Salut,
Alors voilà ... Je me posais la question suivante : existe-t-il un moyen en C de gérer la généricité de manière transparente ? Je m'explique ...
En C#, lorsque l'on veut utiliser, par exemple, une pile, il suffit de faire Stack p = new Stack<Type>(); (en gros). On utilise les templates, quoi ...
Imaginons maintenant qu'en C, on veuille coder une structure qui simule une pile, le tout à l'ancienne, à l'aide de typedef et tout ça. Pour simuler la généricité, il suffit d'utiliser le pointeur void*. Ainsi, on aura par exemple une fonction pop qui aura le prototypage suivant : void Stack_push(Stack pile, void* element). De même, on aura : void* Stack_pop(Stack pile).
Le problème, c'est qu'à chaque fois que l'on va vouloir utiliser récuperer un élément, on va devoir le caster pour récuperer son type d'origine. Exemple : int* i = (int*)Stack_pop(pile). Et à la longue, ces casts qui ne sont pas implicites sont vraiment désagréables et redondant. Donc ma question, c'est est-ce qu'il existerait pas une astuce ou une méthode (basée sur les macros, par exemple, ou autre) qui permet de rendre ce cast automatique ?
Bien entendu, je sais qu'il suffirait pour cela de passer au C++ ... Mais je peux pas !
Merci de vos réponses !
++ & bonne année !
L.S.
mardi 9 janvier 2007 à 07:28:17 | Re : [C] Généricité et cast automatique.

vecchio56

Administrateur CodeS-SourceS
En C, le cast de void* en int* (ou tout autre type de pointeur) est implicite, donc tu n'a pas de problème

_____________________________________
Un éditeur de ressources gratuit pour Windows

mardi 9 janvier 2007 à 13:14:14 | Re : [C] Généricité et cast automatique.

LocalStone

Alors d'abord, je suis pas trop sur de ce que tu viens de marquer parce que ne pas faire de cast provoque un warning à la compilation. Et de plus, j'ai mis un int* en exemple, mais ça pourrait être n'importe quoi, un float*, un char* ou gloubiboulga ...
++
L.S.
mardi 9 janvier 2007 à 15:55:08 | Re : [C] Généricité et cast automatique.

vecchio56

Administrateur CodeS-SourceS
En C pur, il n'y a pas de warning pour une conversion de void* en int* (d'ailleurs en C, on ne caste jamais devant un malloc pour cette raison)
Pour le controle de type, c'est évident qu'il n'a pas lieu

_____________________________________
Un éditeur de ressources gratuit pour Windows

mercredi 10 janvier 2007 à 04:38:13 | Re : [C] Généricité et cast automatique.

NitRic

assure toi de ne pas compiler en C++, en C++ le cast est requis

~(.:: NitRic ::.)~
mercredi 10 janvier 2007 à 11:07:54 | Re : [C] Généricité et cast automatique.

LocalStone

Bon, peut-être qu'il n'y a pas besoin de cast pour int*, mais pour les autres, si. Existe-t-il une solution pour éviter d'avoir à caster pour les autres types ?
L.S.
mercredi 10 janvier 2007 à 12:44:57 | Re : [C] Généricité et cast automatique.

vecchio56

Administrateur CodeS-SourceS
Ce code compile sans warning, avec le niveau de warning par défaut de VC++

typedef struct
{
  int a;
} STRUCTURE;

int main() {

  void* v = 0;
  STRUCTURE* s = v;
  int* i = v;
  double* d = v;
}


_____________________________________
Un éditeur de ressources gratuit pour Windows



Cette discussion est classée dans : exemple, void, stack, pile, généricité


Répondre à ce message

Sujets en rapport avec ce message

Classe et Piles... [ par Amanobuo ] Bonjours,j'apprend les class et je voudrais pour m'entrainer realiser une implementation statique de type pile grace a une class. Le code est bugé car Pile de double [ par Pof ] Bonjour ! voilà j'ai un petit problème avec les std::stack :std::stack stack;stack.push(20);stack.push(10);[...]double a = stack.top();pri template- au secours [ par toddy_101 ] bonjour tout le monde, j'ai un probleme au niveau des templates, ca bloke au niveau du linkage!! voici la declaration de la classe , et des methodes: stack et char * [ par yuriashford ] Salut à tous je developpe actuellement une application qui utilise une stack de STL  la stack est une declaré : stack pile; Le probleme vient de l'aff dépassement de capacité de la pile d'exécution [ par glipper ] Bonjour,j'ai crée une fonction comme ceci, qui mémorise les malloc effectués par un programme :void* _malloc(size_t n, int line, char* file){    void* question sur le C [ par zoneart ] Bonjour, J'ai une question sur le C: void exemple(const *char); int main(void) { char nom[20]; memset (nom, 0, 20); printf ("Entrez un nom : exemple de thread [ par dambeaufort ] bonjour,Je ne comprend pas trés bien comment creer un thread.Est ce que quelqu'un d'entre vous pourrais me fournir un source qui permettent d'avoir 2 Utilisation de stack en C++ [ par jagdjg ] J essaie de faire un stack mais ca ne marche pas La declaration est : Stack* pile = new Stack();le push : pile->Push(strPile);le pop : strPile = pile- Hexadécimal [ par cyberlewis ] Salut à tous,Voilà par exemple j'ai un nombre héxa : 0xA5F2Comment récuperer dans deux variables séparées (en décimal), A5 et F2 svp ???Et comment fai se connecter à POSTGRES via le C [ par UKRAINIEN ] Bonjour,Je suis étudiant à Dauphine, en formation continue, pour un an.On me demande d'accéder à une base de données via le C. L'exemple que l'on nous


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,640 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales