Je suis en train d'écrire un jeu et pour l'instant j'ai pu implémenter un système de fichiers via sqlite
avec une classe et ses méthodes. Pour rendre la vie plus facile j'ai prévu d'écrire certaines fonctions comme fopen
, fclose
, fread
, rename
, etc. pour pouvoir occulter les fonctions de base et diriger mes appels vers mon système de fichiers plutôt que vers l'original. Pour la première tout fonction de trois a bien fonctionné pour moi avec ces prototypes:Fonctions d'observation de C stdlib/stdio
File *fopen(String _Filename, String _Mode); // i have my own optimized File struct
void fclose(File *_File);
size_t fread(String *_DstBuf, size_t _ElementSize, size_t _Count, File *_File);
Cela a bien fonctionné comme je suis soit retournais une autre struct ou les paramètres à l'exception d'un File*
et non d'un FILE*
, cependant la fonction renommer semble être un peu plus compliquée!
int rename(String _OldFilename, String _NewFilename);
Ceci est à peu près le même prototype. sauf que j'utilise std::string
(typedef'ed String
) que const char*
! Une idée de comment je pourrais convaincre mon compilateur d'utiliser ma fonction ou d'ignorer le stdio-one?
L'astuce de l'espace de noms vil fonctionnait bien pour les premiers prototypes, mais j'ai le problème avec 'rename' car le compilateur n'est pas capable de décider si mes params sont' const char * 'ou' String's! Essayer d'appeler 'renommer (String ("/dev/null "), String ("/dev/less "));' résoudre le conflit, mais il n'est pas bon d'appeler le constructeur 'String' chaque fois que je passe un argument . –
Pourriez-vous essayer d'ajouter explicitement 'using MyFsFunctions :: rename;' en plus de/à la place de 'using namespace MyFsFunctions;'? – sehe
Ne fonctionne pas! Cependant, un '#define rename MyFsFunctions :: rename' pourrait résoudre le problème, mais c'est C++ et je n'aime pas les macros comme dans C>./ EDIT: Votre deuxième solution a fonctionné, MAIS la ligne doit être entrée INTO la fonction et pas dans le fichier source ... –