Problema macro C ++ (interpretación de coma,)
El siguiente código se compila bien.
#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);
});
};
enga en cuenta que la macro real en mi código es más compleja. He dado una versión simplificada que puede no tener mucho sentido lógic
Ahora, si agrego otro parámetro de plantilla en la función, se produce un error de compilación (el problema se explica en el comentario del código):
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
Cómo solucionar el problema (necesito agregar ese parámetro de plantilla adicional al código existente y obtengo ese error).