Posible convertir la lista de #defines en cadenas
Supongamos que tengo una lista de#define
s en un archivo de encabezado para una biblioteca externa. Estas#define
s representan códigos de error devueltos por funciones. Quiero escribir una función de conversión que pueda tomar como entrada un código de error y devolver como salida un literal de cadena que represente el valor real#define
nombre.
Como ejemplo, si tengo
#define NO_ERROR 0
#define ONE_KIND_OF_ERROR 1
#define ANOTHER_KIND_OF_ERROR 2
Me gustaría una función para poder llamar como
int errorCode = doSomeLibraryFunction();
if (errorCode)
writeToLog(convertToString(errorCode));
Y tieneconvertToString()
ser capaz de convertir automáticamente ese código de error sin ser una caja de interruptor gigante
const char* convertToString(int errorCode)
{
switch (errorCode)
{
case NO_ERROR:
return "NO_ERROR";
case ONE_KIND_OF_ERROR:
return "ONE_KIND_OF_ERROR";
...
...
...
Tengo la sensación de que si esto es posible, sería posible usar plantillas y metaprogramación, pero eso solo funcionaría si los códigos de error fueran en realidad un tipo y no un montón de macros de procesador.