c ++ make macro, как заставить генерировать функцию времени компиляции - PullRequest
0 голосов
/ 25 декабря 2018

вот пример, используйте cpp14

После регистрации функций во время компиляции мы хотим сгенерировать код, который может выполнять зарегистрированные функции после выполнения их в определенной функции.

struct Data
{
    DECLARE_DATA(Banana);
    DECLARE_DATA(Apple);
    DECLARE_DATA(Orange);
    ...
};

struct Data
{
    int Banana;
    int GetBanana() { return Banana; }
    int SetBanana() { // set Banana }

    int Apple;
    int GetApple() { return Apple; }
    int SetApple() { // set Apple; }

    int Orange;
    int GetOrange() { return Orange; }
    int SetOrange() { // set Orange; }
    ...

    bool Load()
    {
        SetBanana();
        SetApple();
        SetOrange();
        ...
    }
};

пожалуйста, помогите мне ....

1 Ответ

0 голосов
/ 25 декабря 2018
#define DECLARE_DATA(name, value) int name; \
int Get##name() { return name; } \
int Set##name() { name = value; }

Похоже, что это работает.

DECLARE_DATA(Data1, 1);
DECLARE_DATA(Data2, 2);
DECLARE_DATA(Data3, 3);

А вот вывод `gcc -E ':

# 1 "t.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 31 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 32 "<command-line>" 2
# 1 "t.c"

int Data1; int GetData1() { return Data1; } int SetData1() { Data1 = 1; };
int Data2; int GetData2() { return Data2; } int SetData2() { Data2 = 2; };
int Data3; int GetData3() { return Data3; } int SetData3() { Data3 = 3; };

Однако, если вам нужны все эти сеттеры, вызываемые вместев другом месте вам лучше использовать скрипт, а не пытаться выполнить это с помощью макросов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...