Здравствуйте, Hоmunculus, Вы писали:
H>Ясно, что обычно начинается с нуля и есть именованный последний типа MY_ENUM_LAST.
H>И можно в цикле от нуля до последнего пройтись по всем.
H>Но пусть таких условий нет. Тот есть начинаться может не с нуля и последнего именованного нет.
H>Как определить границы в этом случае?
А кто мешает явно их задать?
template<class T> struct Bounds;
template<class T> int min(const T&) { return Bounds<T>::min; }
template<class T> int max(const T&) { return Bounds<T>::max; }
#define DECL_BOUNDS(E,a,b) template<> struct Bounds<enum E> { enum { min=a, max=b }; };
enum E { A,B,C,D };
DECL_BOUNDS(E,A,D);
int main(int argc,char** argv) {
enum E e;
int first=Bounds<E>::min, last=Bounds<E>::max;
for(int k=min(e);k<=max(e);k++) {}
return 0;
}