Re[3]: Переделать макрос в функцию
От: hmmr_  
Дата: 03.09.09 14:01
Оценка:
R>Тем, не менее, не смотря на кажущуюся (мне, по крайней мере) бессмысленность этого кода, предложенный ниже вариант по своему эффекту полностью идентичен исходному.
R>
R>int main()
R>{
R>  struct
R>  {
R>    int result_code;
R>    int foo::*field; 
R>  } cases[] = {
R>    {1, &foo::foo_a},
R>    {2, &foo::foo_b},
R>    {3, &foo::foo_c},
R>  };

R>  const int cases_count = sizeof(cases) / sizeof(*cases);

R>  barstruct bar;
R>  char * buf;

R>  if (fillbuff(buf) == 0) 
R>    return 0;

R>  for (int i = 0; i < cases_count; ++i)
R>    if (fillbuff(buf) == cases[i].result_code)
R>    {
R>      foo * f = bar.get_foo( bar.c );
R>      if(!f)
R>        break;
R>      return f->*cases[i].field;
R>    }
R>}
R>


Привиденный пример синтетический, просто для того чтобы показать от чего хочется избавится. Здесь интересует прежде всего не оптимизация, а какими путями можно избавится от макроса. Учитывая что во время работы fillbuff динамически создаются различные структуры в barstruct и их количество не известно при компиляции.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.