Re[3]: Разное поведение в switch при разных контекстах выпол
От: Юрий Жмеренецкий ICQ 380412032
Дата: 11.01.09 14:30
Оценка: 1 (1)
Здравствуйте, 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.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.