, BOOST_PP_SEQ_CONTAINS . , .
, , , . -, BOOST_PP_SEQ_FOR_EACH:
#include <boost/preprocessor.hpp>
#define EXPAND_ENUM_CASE_2(text1, text2) text1 ## text2
#define EXPAND_ENUM_CASE(r, data, elem) \
case elem : EXPAND_ENUM_CASE_2(data ## _ ## CASE ## _ , elem)
, :
#define WORKDAY_ENUMERATORS (Monday)(Tuesday)(Wednesday)(Thursday)
enum Workday { BOOST_PP_SEQ_ENUM(WORKDAY_ENUMERATORS) };
, , . , , .
, , :
#define WORKDAY_CASE_Monday { return "Mondays suck"; }
#define WORKDAY_CASE_Tuesday { return "Tuesdays are better than Mondays"; }
#define WORKDAY_CASE_Wednesday { return "Hooray for humpday!"; }
#define WORKDAY_CASE_Thursday { return "Thursdays are okay"; }
#define WORKDAY_CASE_Friday { return "No one really works on Friday"; }
case WORKDAY_ENUMERATORS WORKDAY_CASE_:
const char* get_day_text(Workday d)
{
switch (d)
{
BOOST_PP_SEQ_FOR_EACH(EXPAND_ENUM_CASE, WORKDAY, WORKDAY_ENUMERATORS)
}
return "WTF?! That not a workday!";
}
WORKDAY_ENUMERATORS, .
, , , :
#undef WORKDAY_CASE_Monday
#undef WORKDAY_CASE_Tuesday
#undef WORKDAY_CASE_Wednesday
#undef WORKDAY_CASE_Thursday
#undef WORKDAY_CASE_Friday
, , , .