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

C

 > 

Divers

 > 

Divers

 > 

Généricité et interface en C ...


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

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


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

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,827 sec (3)

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