Таки нашел я это решение Вот модификация кода Z1024:
[code]
#define SEPARATOR ,
#define NAMES C(defaultColor) C(red) C(green) C(blue)
#define C(x) x SEPARATOR
enum colors { NAMES NUMCOLORS };
#undef C
#undef SEPARATOR
#define SEPARATOR ;
colors getColor(const char* colorNameParam)
{
#define C3(theColor, colorName, colorString) if(strcmp(colorName,colorString)==0)return theColor //general case
#define C(theColor) C3(theColor, #theColor,colorNameParam); //shorter form
NAMES; //check every enum token
return defaultColor;
}
[/code]
Цвета задаем только в одном месте, и обработка этих значений автоматически генерируется внутри getColor
[code]
#define SEPARATOR ,
#define NAMES C(defaultColor) C(red) C(green) C(blue)
#define C(x) x SEPARATOR
enum colors { NAMES NUMCOLORS };
#undef C
#undef SEPARATOR
#define SEPARATOR ;
colors getColor(const char* colorNameParam)
{
#define C3(theColor, colorName, colorString) if(strcmp(colorName,colorString)==0)return theColor //general case
#define C(theColor) C3(theColor, #theColor,colorNameParam); //shorter form
NAMES; //check every enum token
return defaultColor;
}
[/code]
Цвета задаем только в одном месте, и обработка этих значений автоматически генерируется внутри getColor
Comment