Re: Разное поведение в switch при разных контекстах выполнен
От: Юрий Жмеренецкий ICQ 380412032
Дата: 11.01.09 13:34
Оценка:
Здравствуйте, kvser, Вы писали:
...
K>Вот тут получается, что при ответе и поток1 и поток 2 фукнцию, подфункцию. А это выглядит так:

K>
K>switch(байтФункции)
K>{
K>  case F1:
K>  {
K>    switch(байтПодфункции)
K>    {
K>      case SF1:{...} case SF2:{...}...и т.д.
K>    }
K>  }
K>...и т.д.
K>}
K>

K>Но при этом действия в телах "case SFx" в потоке1 и потоке2 отличаются, т.е. эта функция в потоке2 просто возвращает логическую переменную, что это ответ или не ответ; а в потоке1 эта функция соответствующим кейсу образом обрабатывает в ответе данные результата, после чего результат показывается пользователю в удобном виде.

K>Дак вот при добавлении/удалении функций и подфункций приходится менять код "switch(байтФункции)" в двух местах, что часто приводит к ошибкам при больших switch. Как можно выполнять различные дествия в case при разном контексте использования? Можно switch заменить чем-то другим, это не важно


Вынести действия в функции. Если значения байтФункции & байтПодфункции представляют собой числа от 0 до 9 то можно прикрутить что-то вроде такого:

#define UNION(A, B) (10*(A) + (B))

switch(UNION(байтФункции, байтПодфункции))
{
  case UNION(F1, SF1): return handle_F1_SF1();
  case UNION(F1, SF2): return handle_F1_SF2();
  //...
}


Если значений больше чем 10, то нужно изменить множитель в UNION.
Так же можно посмотреть в сторону мультиметодов.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.