Re: Можно как-то автоматически найти границы енума?
От: kov_serg Россия  
Дата: 06.02.26 05:42
Оценка:
Здравствуйте, 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;
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.