Bonjour à tous !
J'essais de créer une classes me permettant de sauvegarder et de charger une donnée quelconque d'un vaisseau. Puisque ces données peuvent des entiers, des nombres à virgules, des nombres à double précision et etc, j'ai pensé à utiliser un pointeur void pour envoyer mes données.
Pour écrire dans un scénario, j'utilise oapiWriteScenario_string() afin d'écrire une chaîne de caractères que je crée plus tôt avec un sprintf(). Mais je croyais sprintf() assez intelligent pour pouvoir convertir les données selon le format qu'on lui donne, mais on dirait que non.
Voilà comment ma classe fonctionne. Lorsqu'on veut sauvegarder une valeur, on l'envoie à ma classe LoaderSaver via la fonction AddData(char *name, char *datastring, void *data). name contient le nom à utiliser (à écrire dans le scénario), datastring contient le format (ex : "%i" pour un entier) et data contient un pointeur vers la donnée qu'on veut sauvegarder. Tous ces renseignements sont sauvegardés dans un tableau dynamique géré par ma classe.
Quand j'arrive pour sauvegarder le scénario, voilà ce que je fais :
// String buffer
char cbuf[256];
// Default saving features
vessel->VESSEL3::clbkSaveState(scn);
// Write the first variable to the scenario
// TODO : loop to save all variables
sprintf(cbuf, datas[0].datastring, &datas[0].data);
oapiWriteScenario_string (scn, datas[0].name, cbuf);
datas est mon tableau dynamique contenant toutes les infos. Pour l'instant, je ne sauvegarde que la première variable. Avec ce code, ça me renvoie un nombre quelconque. Mais si je cast mon pointeur void, j'obtiens le bon nombre. Voici le code qui marche :
// String buffer
char cbuf[256];
// Default saving features
vessel->VESSEL3::clbkSaveState(scn);
// Write the first variable to the scenario
// TODO : loop to save all variables
sprintf(cbuf, datas[0].datastring, *((int*)datas[0].data));
oapiWriteScenario_string (scn, datas[0].name, cbuf);
Mais voilà, je ne veux pas caster à chaque fois, le but étant que le tout soit "universel" (toutes forme de données en nombres).
Vous avez une idée à part le casting ?