Здравствуйте, 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.
Так же можно посмотреть в сторону мультиметодов.