Re[2]: Как заменить set на шаблоны?
От: Кодт Россия  
Дата: 24.10.07 08:39
Оценка:
Здравствуйте, _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>>
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.