Accueil > Forum > > > > Généricité et interface en C ...
Généricité et interface en C ...
jeudi 21 décembre 2006 à 15:38:23 |
Généricité et interface en C ...

LocalStone
|
Salut à tous ! Alors voilà ... Je me demandais tout à l'heure comment faire pour avoir une interface en C (une sorte d'objet abstrait dont on ne connait que le nom des méthodes). Du coup, j'ai eu une petite idée et j'ai écrit ça :
main.c : #include <stdio.h> #include <stdlib.h>
typedef struct sEntier *Entier; struct sEntier { int Valeur; void(*ecrire)(Entier); };
void Entier_ecrire(void *n) { Entier m = (Entier)n; printf("%d", m -> Valeur); }
typedef struct sReel *Reel; struct sReel { float Valeur; void(*ecrire)(Reel); };
void Reel_ecrire(void *x) { Reel y = (Reel)x; printf("%f", y -> Valeur); }
typedef struct sWritable *Writable; struct sWritable { int Valeur; void(*ecrire)(void *); };
void ecrire(void *e) { Writable i = (Writable)e; i -> ecrire(i); }
int main(int argc, char *argv[]) { Entier k = (Entier)malloc(sizeof(struct sEntier)); k -> ecrire = Entier_ecrire; k -> Valeur = -6; Reel y = (Reel)malloc(sizeof(struct sReel)); y -> ecrire = Reel_ecrire; y -> Valeur = 5.6; printf("k="); ecrire(k); printf("\n"); printf("y="); ecrire(y); printf("\n"); }
Et en fait ... Bah ça marche. Alors ma question, c'est ... Est-ce que c'est propre ? Non parce que ... Bah je sais pas. Pour moi, là, ça tiens un peu de la magie quand même. Mais si c'est propre, je crois que ça pourra servir aux plus tordus d'entre nous ! Merci de vos commentaires ! L.S.
|
|
jeudi 21 décembre 2006 à 15:47:21 |
Re : Généricité et interface en C ...

LocalStone
|
Petite erreur de ma part : il faut remplacer dans les structures sEntier et sReel le paramètre des pointeurs de fonctions *ecrire par void *. Bah oui ... Sinon ... Bah ça marche pas !
|
|
jeudi 21 décembre 2006 à 17:30:19 |
Re : Généricité et interface en C ...

luhtor
|
Le pb est C, c'est que ya pas de controle de type avec ces pointeurs void. Mais sinon, je vois pas de pb.
Enfin je sais pas si on peut appeler vraiment ca générique, on utilise
les macro en général en C pour faire du généric mais pas sur des
classes entières.
|
|
vendredi 22 décembre 2006 à 00:40:28 |
Re : Généricité et interface en C ...

yann_lo_san
|
Je vois pas bien le rapport avec "interface", qui doit etre une sorte d'objet abstrait dont on peut dériver quelque chose de plus concret, alors que là c'est directement entier ou réel, pas d'abstraction... Sinon ça doit pouvoir servir à quelque chose. En C, les interfaces COM utilisent IDL (interface definition langage) et le compilateur MIDL qui permettent vraiment de "l'objet" en C.
|
|
Cette discussion est classée dans : ecrire, void, entier, struct, reel
Répondre à ce message
Sujets en rapport avec ce message
ecrire dans un fichier [ par bellionl ]
salut,voila depuis une semaine je tente de conprendre le c++ avec borland c++ builderle problème est quand je veut écrire dans un fichier.création du
Gros Probleme En C [ par Infern0 ]
Bon, voila 3 fonction de mon programme. Avec celle d'affichage, quand j'affiche la 1ere, y a aucun probleme, si j'affiche la deuxieme, g des chiffre
ecrire en c un prg qui reconnait des lexemes? [ par battouta ]
bonjour le probleme c d'ecrire un prg en C qui reconnait des lexemes ilfaut faire un automate pour chaque lexemes puis les reunir en un algorithme a
Est ce que ma liste chainee generique est bien faite? [ par juju0169 ]
Bonsoir a tous. Je vais une nouvelle fois avoir besoin de vous. Je viens de finir un module de liste chainee generique et je voudrais savoir s'il est
probleme forcage de type en c [ par angebrune8 ]
Bonjour, j'ai un petit soucis . En fait j'ai une fonction generique de type : void inserer(struct A,void * elem){} et j'ai une fonction qui fait appel
tableaux de void * [ par angebrune8 ]
Bonjour,un problème avec les pointeurs générique. voici mon code: struct A{ void ** cles; } typedef struct A *A; void **cles(A self) { return
Pb d'affichage avec des listes doublement chianées [ par Orezza ]
Bonjour a tous,voila je dois faire un petit analyseur syntaxique, en ce moment j'en suis au prémice de mon code et j'ai dejà un Big problem d'affichag
compression de huffman urgent svp [ par bundy_boy ]
Bonjour voila, j'essai d'implémenter la compression de huffman dans un archiveur (qui lui fonctionne très bien), j'ai testé deux algorithmes de huffma
programme qui affiche un triangle [ par laguchori ]
Bonjour , J'ai un projet à faire qui consiste à créer une classe ligne et la tracer à partir de deux point et ensuite créer une Class triangle dérivée
Livres en rapport
|
Derniers Blogs
JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|