Как обойти стандартную функцию C ++ при сохранении ее функциональности
Я ищу способ переопределить набор функций POSIX, но затем завершить переопределение вызовом исходной функции. Идея состоит в том, что я пытаюсь создать слой, который может ограничивать то, что API OS 's может быть вызван в зависимости от того, какой "профиль" активен Это "профиль" определяет, какой набор функций разрешен, и любые не указанные функции не должны использоваться.
Например, если в одном профиле мне не разрешено использовать strcpy, я бы хотел иметь возможность вызвать ошибку времени компиляции (через static_assert) или вывести что-то на экран, говоря «strcpy не допускается в этом профиле " такие как ниже:
MY_string.h
#include
char *strcpy(char *restrict s1, const char *restrict s2)
{
#if defined(PROFILE_PASS_THROUGH)
printf("strcpy is not allowed in this profile\n");
return strcpy(s1, s2);
#elif defined(PROFILE_ERROR)
static_assesrt(0, "strcpy is not allowed in this profile\n");
return 0;
#else
return strcpy(s1, s2);
#endif
}
Таким образом, в main.cpp я могу использовать MY_string.h
#define PROFILE_PASS_THROUGH
#include "MY_string.h"
int main()
{
char temp1[10];
char temp2[10];
sprintf(temp2, "Testing");
if (0 = strcpy(temp1, temp2))
{
printf("temp1 is %s\n", temp1);
}
return 0;
}
Теперь я понимаю, что код, который я написал выше, не будет компилироваться должным образом из-за переопределения strcpy, но есть ли способ разрешить такую функциональность, не играя с макросами или создавая мои собственные стандартные библиотеки c и c ++?