Макрос "параметр" имя сетки.Это может работать?Что я делаю неправильно? - PullRequest
2 голосов
/ 07 апреля 2011
    // MACROS

#define A_PROPERTY(TYPE, NAME)                      \
    private:                                        \
        TYPE NAME;                                  \
    public:                                         \
        void SetNAME(TYPE theNAME) {NAME=theNAME;}  \
        TYPE GetNAME() {return NAME;}               \

Я пытаюсь создать простой макрос, который примет ТИП и ИМЯ и создаст:

  1. Закрытый член ТИПА с именем ИМЯ
  2. Публичный "геттер"метод с именем GetNAME (где NAME является переменной ...)
  3. Открытый метод" setter "с именем GetNAME (где NAME является переменной ...)

Вот как яиспользуйте его из определения класса:

A_PROPERTY(int, Age)

MACRO работает, но создает метод "getNAME" вместо "get (что бы я ни указывал в NAME)".Кажется, MACROS не очень хорошо разбирает строки и «параметры».Есть ли способ добиться того, чего я хочу?или мне просто нужно иметь метод с именем "NAME" с другой подписью, чтобы различать get и set?

Ответы [ 3 ]

8 голосов
/ 07 апреля 2011

Используйте ## для прошивки токенов.

#define A_PROPERTY(TYPE, NAME)                            \
    private:                                              \
        TYPE NAME;                                        \ 
    public:                                               \
        void Set##NAME(TYPE the##NAME) {NAME=the##NAME;}  \
        TYPE Get##NAME() {return NAME;}
1 голос
/ 07 апреля 2011
void SetNAME(TYPE theNAME) {NAME=theNAME;}  
TYPE GetNAME() {return NAME;}              

Это создаст одинаковые имена функций для всех параметров NAME и TYPE.

Я думаю, вы хотите это:

void Set##NAME(TYPE the##NAME) {NAME=the##NAME;}  
TYPE Get##NAME() {return NAME;}               
0 голосов
/ 07 апреля 2011

NAME на самом деле не является приватным, потому что вы можете читать и записывать его через функции-члены. Вы также можете использовать struct или сделать NAME общедоступным.

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