Возможно преобразовать список #defines в строки
Предположим, у меня есть список#define
s в заголовочном файле для внешней библиотеки. Эти#define
s представляют коды ошибок, возвращаемые функциями. Я хочу написать функцию преобразования, которая может принимать на вход код ошибки и возвращать в качестве вывода строковый литерал, представляющий фактическую#define
название.
Как пример, если у меня есть
#define NO_ERROR 0
#define ONE_KIND_OF_ERROR 1
#define ANOTHER_KIND_OF_ERROR 2
Я хотел бы, чтобы функция могла вызываться как
int errorCode = doSomeLibraryFunction();
if (errorCode)
writeToLog(convertToString(errorCode));
И имеютconvertToString()
быть в состоянии автоматически преобразовать этот код ошибки, не будучи похожим на гигантский случай переключения
const char* convertToString(int errorCode)
{
switch (errorCode)
{
case NO_ERROR:
return "NO_ERROR";
case ONE_KIND_OF_ERROR:
return "ONE_KIND_OF_ERROR";
...
...
...
У меня есть ощущение, что если это возможно, это было бы возможно с использованием шаблонов и метапрограммирования, но это работало бы только на то, что коды ошибок были фактически типом, а не набором макросов процессора.