Можно с помощью такого Сишного подхода:
// .h файл
#define ENUM_MAP(XX) \
XX(0, laborer, Laborer help msg) \
XX(1, secretary, Secretary help msg)\
XX(2, manager, Manager help msg)\
XX(3, accountant, Accountant help msg)\
XX(4, executive, Executive help msg)\
XX(5, researcher, Resercher help msg)
enum etype
{
#define XX(num, name, string) name = num,
ENUM_MAP(XX)
#undef XX
};
// .cpp файл, включающий предыдущий .h
#define XX(num, name, string) #string,
const char * enum_msg[] = [
ENUM_MAP(XX)
]
#undef XX
Такими образом имеем массив enum_msg со строками из третьего параметра XX в ENUM_MAP.
Набор параметров в XX можно варьировать как угодно.
Подобная техника применяется, например,
тут.