2011-12-20 2 views
1

매크로를 통해 C++ 클래스에 코드를 삽입하고 있습니다. 액세스 수정 자의 컨텍스트에 따라이를 수행하는 방법이 있습니까? 예 :컨텍스트 기반의 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

매크로는 엄격히 텍스트 대체입니다.

그들은 상황을 알지 못합니다.

class A 
{ 
    PUBLIC: 
     A(); 
    PRIVATE: 
     int x; 
}; 
+0

매크로는 다른 매크로를 "호출"할 수 있으므로 컨텍스트는 다른 매크로 정의 집합입니다. 그러나 재사용 가능한 방식으로 매크로의 정의를 변경하려면 재사용 가능한 헤더 파일 (및 두통)이 필요합니다. – Potatoswatter

1

당신은 당신의 자신의 액세스 수준을 정의 할 수

#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

'params'는 무엇을합니까? 그리고 그들은'PUBLIC (param)'과'PRIVATE (param)'으로 불릴 필요가 있습니다. 괄호 없이는 대체물이 없다. – Potatoswatter

+0

질문을 이해할 수 없습니다 ... –

1

당신은 마지막 또는 첫 번째 클래스에 코드를 추가하고 자신에게 컨텍스트를 강제 수 :

#define PUBLIC INJECT_PUBLIC_CODE(params) \ 
     public 

#define PRIVATE INJECT_PRIVATE_CODE(params) \ 
     private 

을하고 파일에 다음을 사용 :