Posible convertir la lista de #defines en cadenas

Supongamos que tengo una lista de#defines en un archivo de encabezado para una biblioteca externa. Estas#defines 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.

Respuestas a la pregunta(7)

Su respuesta a la pregunta