CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Des templates en C

lag-it
lag-it
Niveau 10
25 octobre 2005 à 17:03:14

J´ai besoin d´écrire, pour un projet en C, une liste chainée un peu particulière, mais qui sera utilisée pour des variables de 3 types différents (instanciées de 3 structures définies au sein de mon projet).

Plutôt que d´écrire 3 fois la même chose en changeant juste le type des valeurs acceptées, j´aimerais obtenir une sorte de template un peu comme en C++.

Je pensait utiliser une structure de la sorte (très réduite ici) :

typedef struct st_List
{
void *data;
struct st_List *next;
}
List;

et caster les pointeurs void selon chaque cas en fonction du type de valeur contenu dans la liste.
Le problème c´est que point de vue utilisateur c´est pas top de devoir caster à chaque fois...

Existe-il une solution académique à ce type de problème ?

lag-it
lag-it
Niveau 10
25 octobre 2005 à 18:39:02

Petit précision : structure que j´ai détaillé plus haut est un noeud simplifié de ma liste, et non pas la liste elle même.

dnob700
dnob700
Niveau 10
25 octobre 2005 à 18:52:49

une fonction push qui aurait le prototype suivant :
push(pile p,void* elem);
devrait pouvoir être appeler avec n´importe quel type pour elem sans avoir besoin de caster (mais c´est vraiment pas type-safe du tout).

Donc tu pourrais juste écrire une fonction pop:
void* pop(pile p);
Et trois macro par exemple :

  1. define pop_type1(p) ((type1*)pop(p))

...

comme ça tout serais identique sauf les trois macros que tu utilise pour dépiler.

Mais bon, c´est pas très beau comme solution je te l´accorde.

lag-it
lag-it
Niveau 10
25 octobre 2005 à 19:37:36

dnob700 > Le problème ne portait pas sur push, étant donné que je garde bien évidement un pointeur de type void en paramètre.

Le soucis concernait le cast des pointeurs lors de pops (que je trouvais pas super pour l´utilisateur).
Mais bon à priori y a pas pas d´autres méthodes que le cast de pointeurs void...

max666-49 > Je vais t´apprendre un truc : l´endroit ou tu te trouves s´appelle un forum, c´est un lieu ou les gens postent des topics et y répondent. Le truc, c´est que les messages que tu écris son visibles par tout le monde, pas juste par quelques personnes comme sous messenger par exemple.
Aussi lorsque dnob700 est arrivé, il a simplement effacé ton topic jugeant qu´il était hors sujet, c´est tout.
Tu penses bien que je n´ai strictement rien à faire des gérémiades d´utilisateurs dans ton genre et que je n´irais pas déranger dnob pour si peu :-))) , j´ai juste pris le temps de répondre à ta question et de te rediriger vers un forum plus adapté à ta requête, ce dont tu n´as visiblement pas tenu compte.
Bonne continuation.

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de Jeux
  • Programmation
  • Création de sites web
  • Linux
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment