estoy tratando de definir un método de clase para las impresiones de depuración que se comportará como printf
:¿Cómo debo usar correctamente __attribute__ ((format (printf, x, y))) dentro de un método de clase en C++?
inline void debug(const char* fmt, ...) __attribute__ ((format (printf, 1, 2)))
Esta queja:
error: format string argument not a string type
me recordó que una declaración de método de clase tiene un parámetro implícito this
, así que cambié las ubicaciones de los parámetros a 2, 3:
inline void debug(const char* fmt, ...) __attribute__ ((format (printf, 2, 3)))
y ahora se compila, pero parece que los parámetros están desplazados, como si el parámetro this
estuviera siendo tratado como parte de la lista de argumentos.
¿Cómo puedo saber la función que this
no es parte de la cadena que quiero imprimir?
¿Se puede utilizar plantillas variadic? Si es así, puede hacer un [tipo impresión segura] (http://www.generic-programming.org/~dgregor/cpp/variadic-templates.html) – chris
No piense demasiado acerca de 'esto'. No es un argumento explícito, punto. Simplemente siga el manual de GCC, que dice que para las funciones de miembro debe agregar 1 a los argumentos de atributo 'format'. Es solo una regla opaca, dada por el proveedor de una extensión de compilación. –
printf (2, 3) es correcto. Definir "parece desplazado" ...? –