Здравствуйте, kvser, Вы писали:
ЮЖ>>Вынести действия в функции.
K>я хочу сказать что не удобно поддерживать одну и туже switch структуру в двух разных местах. К примеру я могу в одном месте добавить case а в другом не добавить его. Как бы можно было сделать так, чтобы я этого не смог забыть?
Если и дальше возиться со switch, то можно его оставить в единственном числе:
#define UNION(A, B, НомерМеста) (100*(A) + 10*(B) + НомерМеста)
Но это уже изврат.
Я правильно понимаю что есть две последовательности почти совпадающих обработчиков ? Пока мысли такие:
Напрашивается еще вариант с полиморфными(или boost::function) обработчиками. switch в этом случае можно оставить один для всех сочетаний (функция, подфункция) или преобразовать в ассоциативный массив std::map<(функция, подфункция), handler>
Тут встает вопрос как заполнять два таких массива. "Пересечение" общих обработчиков можно выделить в один массив, и для каждого случая создавать его копию(один раз при запуске) и добавлять специфические для данного потока обработчики. Это позволит локализовать места их добавления.
Тоже самое можно сделать и в compile-time на шаблонах. Будет три специализации(traits): общие обработчики, thread_specific1 и thread_specific2.