2012-10-18 5 views
2

일부 코드를 생성하는 x 매크로를 작성하고 싶습니다. 이 코드는 여러 헤더에 의존하며 네임 스페이스 내부에서 생성됩니다.x 매크로 안에 #include를 넣으십시오.

문제는 xmacro의 include가 호출자의 네임 스페이스 안에 포함된다는 것입니다. 이 문제를 해결할 수있는 방법이 있습니까?

예 :

xmacro.hpp :

#include "foo.hpp" 
struct bar { 
BODY 
}; 
#undef BODY 

main.hpp :

namespace ns { 
    #define BODY int func(); 
    #include "xmacro.hpp" // inserting foo.hpp inside namespace ns 
} 

답변

3

불행하게도 아니, X-매크로 때문에, 독특한하면서, 여전히 궁극적으로 단지가 포함 된 파일 . 이것은 자신의 네임 스페이스에 #include <iostream>을 넣는 것과 다르지 않습니다.

X 매크로 포함은 실제로 아무것도 수행하지 않아야하지만 대상 매크로 (정의가 아직 결정되지 않음)를 포함해야합니다. 당신의 X-매크로의 사용이 전제 조건이있는 경우,이 같은 일을 할 것입니다 :

xmacro_prelude.hpp : (보통 방법으로, .DEF 접미사)

#ifndef XMACRO_PRELUDE_INCLUDED 
#define XMACRO_PRELUDE_INCLUDED 

#include "foo.hpp" 

#endif 

xmacro.hpp :

#ifndef XMACRO_PRELUDE_INCLUDED 
    #error "You must include xmacro_prelude.hpp prior to using this X-macro." 
#endif 

struct bar { 
BODY 
}; 

#undef BODY 

main.hpp :

#include "xmacro_prelude.hpp" 

namespace ns { 
    #define BODY int func(); 
    #include "xmacro.hpp" 
} 
관련 문제