Сабж. Как можно сделать подобное в этом коде? Если бы не поле operand, то делается всё просто.
struct foo {
int foo_a;
int foo_b;
int foo_c;
};
struct barstruct {
int c;
int d;
foo * get_foo(int n) { return &f; }
private:
foo f;
};
#define FUNC(res, operand) \
else if (fillbuff(buf) == res) \
{ \
foo * f = bar.get_foo( bar.c ); \
if (f) \
return f->operand; \
}
int fillbuff(char const * buf)
{
int i;
/// ...
return i;
}
int main()
{
//...
barstruct bar;
char * buf;
if (fillbuff(buf) == 0) {
return 0;
}
FUNC(1, foo_a)
FUNC(2, foo_b)
FUNC(3, foo_c)
//...
}