Здравствуйте, _Dreamer, Вы писали:
_D>по моему, так не стоит усложнять, если имеющееся решение Вас устраивает.
_D>по приведенной же ситуации можно сделать вот такие варианты —
_D>насколько такие 'огороды' подходят для задачи, решайте сами.
Для любителей МосВелосипедСтройМонтажа есть boost/mpl и boost/tuple
А если диапазон перечисления небольшой, то можно и битовые операции задействовать. Тогда не придётся порождать разные воплощения шаблона для разных множеств.
enum BITSET { Nothing = 0, Universe = ~0 };
BITSET single(unsigned item) { assert(item < sizeof(unsigned)*CHAR_BIT); return 1<<item; }
bool subset(BITSET x, BITSET y) { return (x&y)==x; }
bool belongs(unsigned item, BITSET bs) { return subset(single(item),bs); }
Для желающих — можно всё это запихать внутрь шаблона traits, чтобы всё было типизировано до предела. А заодно и BITSET сделать не встроенным типом, чтоб случайно не смешивать множества и элементы.
Ну и в compile time затащить тоже труда не составит, я думаю.
... << RSDN@Home 1.2.0 alpha rev. 655>>