макрос C ++, основанный на контексте - PullRequest
1 голос
/ 20 декабря 2011

Я внедряю код в классы C ++ с помощью макросов. Есть ли способ сделать это в зависимости от контекста модификаторов доступа? Что-то вроде

#if (we_are_in_public_context)
INJECT_PUBLIC_CODE(params)
#else if (we_are_in_protected_context)
INJECT_PROTECTED_CODE(params)
#else INJECT_PRIVATE_CODE(params)

Ответы [ 3 ]

3 голосов
/ 20 декабря 2011

Нет.макросы строго заменяют текст.

Они не знают контекста.

1 голос
/ 20 декабря 2011

Вы можете добавить свой код последним или первым в классе и заставить себя контекст:

#define INJECT_PUBLIC_CODE(params) \
public: \
   DoSomethingPublic(params);\
private:

#define INJECT_PROTECTED_CODE(params) \
protected: \
   DoSomethingProtected(params);\
private:

INJECT_PRIVATE_CODE(params) \
private: \
   DoSomethingPrivate(params);\
private:

Удачи

1 голос
/ 20 декабря 2011

Вы можете определить свои собственные уровни доступа:

#define PUBLIC INJECT_PUBLIC_CODE(params) \
        public

#define PRIVATE INJECT_PRIVATE_CODE(params) \
        private

и используйте их в своих файлах:

class A
{
   PUBLIC:
      A();
   PRIVATE:
      int x;
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...