Possível converter a lista de #defines em strings
Suponha que eu tenha uma lista de#define
s em um arquivo de cabeçalho para uma biblioteca externa. Estes#define
s representam códigos de erro retornados de funções. Eu quero escrever uma função de conversão que possa tomar como entrada um código de erro e retornar como saída uma literal de string representando o real#define
nome.
Como exemplo, se eu tiver
#define NO_ERROR 0
#define ONE_KIND_OF_ERROR 1
#define ANOTHER_KIND_OF_ERROR 2
Eu gostaria que uma função pudesse chamar como
int errorCode = doSomeLibraryFunction();
if (errorCode)
writeToLog(convertToString(errorCode));
E temconvertToString()
poder converter automaticamente esse código de erro sem ser uma caixa de comutação gigante parecida com
const char* convertToString(int errorCode)
{
switch (errorCode)
{
case NO_ERROR:
return "NO_ERROR";
case ONE_KIND_OF_ERROR:
return "ONE_KIND_OF_ERROR";
...
...
...
Tenho a sensação de que, se isso for possível, seria possível usar modelos e metaprogramação, mas isso só funcionaria se os códigos de erro fossem realmente um tipo e não um monte de macros de processador.