Как обойти стандартную функцию 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 ++?

Ответы на вопрос(7)

Ваш ответ на вопрос