다음 코드는 정상적으로 컴파일됩니다. 내가 함수에 다른 템플릿 매개 변수를 추가하면 내 코드의 실제 매크로가 더 복잡하다는C++ 매크로 문제 (쉼표 해석)
#define CMD_MACRO(pp, cmd) \
{ \
if (pp)\
{ cmd; } \
}
template<class T> void operate_on(T &data, char c) {
data=data+1;
};
int main() {
int book=4;
char c;
CMD_MACRO(book, {
operate_on<int>(book, c);
});
};
주, 나는
이제 더 논리적 이해가되지 수있는 단순화 된 버전을 제공해야 함 (문제가 코드 주석에서 설명) 컴파일 오류를 제공합니다 :
template<class T, bool b> void operate_on(T &data, char c) {
data=data+1;
};
int main() {
int book=4;
char c;
CMD_MACRO(book, {
operate_on<int, false>(book, c); /* here the "," between int and
false is being treated
as separating arguments to CMD_MACRO,
instead being part of 'cmd'. Thats strange
because the comma separating book and c is
treated fine as part of 'cmd'. */
});
};
test.cpp:18:6: error: macro "CMD_MACRO" passed 3 arguments, but takes just 2
test.cpp: In function 'int main()':
test.cpp:16: error: 'CMD_MACRO' was not declared in this scope
이 문제를 해결하는 방법 (I 코드를 기존 여분의 템플릿 매개 변수를 추가해야하고 이러한 오류를 얻고있다).
새로운 질문에는 몇 가지 우수한 답변이 있습니다. http://stackoverflow.com/questions/13842468/comma-in-c-c-macro/13842784#13842784 – jjrv