И в чем причина того, что вы не можете просто использовать свои собственные функции под любым другим именем?
Если весь конфликт связан с разрешением перегрузки, вам просто нужно скрыть фактические прототипы; Вы можете сделать их перенаправлять на ваши собственные функции.
Тем не менее, я рекомендую против общего подхода: даже с этим «исправлением» у вас в лучшем случае будут проблемы с упорядочением и, возможно, даже дублирующиеся символы ссылок.
Если ваши функции не выполняют то же самое, заставьте их использовать другое имя. Так как вы используете c ++, вы можете сделать этот мерзкий трюк (в противном случае не рекомендуется) в MyFsFunctions.h:
namespace MyFsFunctions
{
// prototypes for fopen, fclose, fwrite, fread etc
}
using namespace MyFsFunctions;
// or:
using MyFsFunctions::fopen;
using MyFsFunctions::fclose;
using MyFsFunctions::fread;
using MyFsFunctions::fwrite; // etc...
Я почти уверен, что вам все еще нужно (нужно) скрывать точные прототипы функций (или компилятор все еще может жаловаться на неоднозначные ссылки на идентификаторы).
Другие подсказки:
- используйте драйвер файловой системы fuse (в Linux / UNIX / MacOS; может быть, это излишне, но его реализация кажется намного более надежной и может быть даже проще, чем то, что вы здесь делаете).
- всегда есть макросы C (-10 очков за зло)
- В компоновщике GNU есть опции, которые позволяют вам «заменять» символы ссылок - в основном для целей отладки, но вы можете использовать их здесь