Вот то, на чем я остановился. Используя эту технику, все, что вам нужно сделать, это включить файл заголовка. Вы будете только создавать экземпляр того, что вы используете. Вы также можете хранить идеальную хеш-таблицу вместо Idx & pStr. Этот подход не работает в C.
файл: e2str.hh
struct Mapper_s
{
int Idx;
const char *pStr;
};
#define ENUM2STR_BEGIN(x) struct x { static const Mapper_s *GetpMap(void) { static const Enum2StrMap_s Map[] =
#define ENUM2STR_END return Map; }; }
const char *MapEnum2Str(int Idx, const Mapper_s *pMap);
файл: mapper.hh
#include "e2str.hh"
ENUM2STR_BEGIN(State_s)
{
{ Running, "Running" },
{ Singing, "Singing" },
{ Jumping, "Jumping" },
{ 0, 0}
};
ENUM2STR_END;
файл: test.cc
#include "mapper.hh"
int main()
{
cout << "State: " << MapEnum2Str(State, State_s::GetpMap()) << endl;
return 0;
}