Я пишу игру, и на данный момент я смог реализовать файловую систему через sqlite
с классом и его методами. Чтобы облегчить жизнь, я планировал написать некоторые функции, такие как fopen
, fclose
, fread
, rename
и т. Д., Чтобы иметь возможность затенять базовые функции и направлять мои вызовы на мою файловую систему, а не на исходную. Для первых три функций все работало нормально для меня с этими прототипами:Теневые функции 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);
Это работало нормально, как я либо возвращая структуру или параметры кроме File*
, а не FILE*
, однако функция переименования кажется немного сложнее!
int rename(String _OldFilename, String _NewFilename);
Это почти тот же прототип. за исключением того, что я использую std::string
(typedef'ed String
), чем const char*
! Любая идея, как я могу убедить мой компилятор использовать мою функцию или игнорировать stdio-one?
Простой трюк пространства имен работал отлично для первых прототипов, однако у меня проблема с 'rename', поскольку компилятор не может решить, являются ли мои параметры' const char * 'или' String '! Попытка называть 'rename (String ("/dev/null "), String ("/dev/less "));' разрешил конфликт, однако не всегда полезно вызывать конструктор 'String' каждый раз, когда я передаю аргумент , –
Не могли бы вы явно добавить 'using MyFsFunctions :: rename; 'в дополнение к/вместо' using namespace MyFsFunctions; '? – sehe
Не работает! Однако '#define переименовать MyFsFunctions :: rename' может решить проблему, но это C++, и я не люблю макросы, как в C>./ EDIT: ваше второе решение сработало, НО строка должна быть введена INTO функция, а не в исходный файл ... –