2012-07-20 6 views
2

내가 여기 붙어있어 ...
어떻게 연결 문자열에 대한 variadic 매크로를 생성 할 수 있습니다

#define CONCAT(a,b) BOOST_PP_STRINGIZE(BOOST_PP_CAT(a,b))
#define CONCAT1(a,b,c) CONCAT(CONCAT(a,b),c) and so on.

어떻게 내가 20 개의 인자를하더라도 CONCAT 매크로를 생성 할 수 있습니까? 내가 사용할 수 있습니다 BOOST_PP_SEQ_FOR_EACH하지만 어떻게 할 이해가 안 돼요?

+1

이 매크로의 인수는 무엇입니까? 예를 들어 줄 수 있습니까? 문자열 연결은 문자열 리터럴 인 경우 컴파일러 자체와 매크로를 사용하지 않고 수행 할 수 있습니다. – iammilind

답변

1

사용 사례에 따라 다릅니다.

#include <boost/preprocessor/cat.hpp> 
#include <boost/preprocessor/stringize.hpp> 
#include <boost/preprocessor/seq/for_each.hpp> 

#define SEQ (a)(b)(c) 

BOOST_PP_STRINGIZE(BOOST_PP_SEQ_CAT(SEQ)) // "abc" 

은 서열을 연결 한 다음 stringize 것이다. "a" "b" "c""abc"과 동일하므로 각 인수를 간단히 문자열화할 수도 있습니다.

#define MY_STRINGIZE(r, data, elem) BOOST_PP_STRINGIZE(elem) 
BOOST_PP_SEQ_FOR_EACH(MY_STRINGIZE, _, SEQ) 
1

이미 Boost 라이브러리를 사용하고 있으므로 BOOST_PP_SEQ_CAT (documentation)으로 시도해보십시오. 요소 목록을 가져와 간단히 연결합니다. 즉 BOOST_PP_SEQ_CAT(a b c) 결과는 abc입니다.