void pointers vs. getypeerde pointers

Pagina: 1
Acties:

  • SvMp
  • Registratie: September 2000
  • Niet online
Ik heb een structuur waarin een MYSQL *mysql is opgenomen.
Deze structuur definieer ik in een headerfile, die bij een library hoort die ik maak.

Om er voor te zorgen dat het type MYSQL bekend is, heb ik een #include <mysql.h> opgenomen. Als ik echter een ander programma maak dat mijn header file gebruikt, dan krijg ik gezeur dat mysql.h niet gevonden wordt: ik moet dan - naast de vindplaats van mijn headerfile - ook de vindplaats van de mysql headers opgeven.

Dit wil ik niet, te veel gedonder. Ik maak juist een eigen library om het client gebruik van één bepaalde database heel simpel te maken.

Daarom heb ik MYSQL *mysql veranderd in void *mysql.
Dit werkt ook, maar zijn er situaties waarin een void *mysql minder geschikt is als een MYSQL *mysql?

Oftewel algemeen gezegd: is een void pointer in plaats van een getypeerde pointer in bepaalde gevallen af te raden, behalve dan natuurlijk wegens de leesbaarheid van je code.

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 14-09 17:42

Gerco

Professional Newbie

Er zijn vast nog wel meer redenen, maar 1 ervan is dat intelli-sense volgens mij niet werkt met void* 's

Dat is niet erg als het een struct is, maar een pointer naar een object is wel handig om het type van te weten @compile time. Anders krijg je late binding enzo, maar dat zal hier wel niet aan de orde zijn.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • SvMp
  • Registratie: September 2000
  • Niet online
Tis idd een struct
De library wordt niet object georienteerd.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

ligt eraan wat je ermee wilt natuurlijk

als je die struct alleen maar als handle gebruikt voor verschillende functies dan maakt het niet zo uit (dwz, het programma zelf loopt niet in die struct te kloten)

maar ja, je gooit nu wel typechecking weg... dit gaat bijvoorbeeld ook werken
code:
1
2
int i = 4;
mysql_function (&i);

maar goed, in principe verplaats je het probleem alleen maar: je werkelijke probleem is je extra include dir. Ik weet niet welk pakket je gebruikt, maar over het algemeen kun je default include dirs ergens opgeven (environment variabele, config file, enz.)
zelf gooi ik alle headers van mijn library in een subdirectory van de include dir (die heet, jawel, oisyn :P)
als ik dan een van mijn libs gebruik doe ik gewoon #include <oisyn/blaat.h> of iets dergelijks, nooit gezeik dat ie m niet kan vinden aangezien de oisyn dir in mijn include dir staat

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.