Предположим, у меня есть это struct
(которое, кстати, содержит битовые поля, но вам все равно):
struct Element {
unsigned int a1 : 1;
unsigned int a2 : 1;
...
unsigned int an : 1;
};
и я хочу получить доступ к члену i'th удобным способом. Давайте рассмотрим поисковое решение.
Я придумал эту функцию:
int getval(struct Element *ep, int n)
{
int val;
switch(n) {
case 1: val = ep->a1; break;
case 2: val = ep->a2; break;
...
case n: val = ep->an; break;
}
return val;
}
Но я подозреваю, что есть гораздо более простое решение. Может быть, что-то вроде стиля доступа к массиву.
Я пытался сделать что-то подобное:
#define getval(s,n) s.a##n
Но, как ожидается, это не сработает.
Есть ли лучшее решение?