Я внедряю код в классы 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)
Нет.макросы строго заменяют текст.
Они не знают контекста.
Вы можете добавить свой код последним или первым в классе и заставить себя контекст:
#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:
Удачи
Вы можете определить свои собственные уровни доступа:
#define PUBLIC INJECT_PUBLIC_CODE(params) \ public #define PRIVATE INJECT_PRIVATE_CODE(params) \ private
и используйте их в своих файлах:
class A { PUBLIC: A(); PRIVATE: int x; };