Рассмотрите пакет, откуда-то откуда-то. Он имеет поле VERSION, существует N возможных ВЕРСИЙ входящего пакета. Каждого пакет с VERSION X должен быть обработан с помощью соответствующих методов/набора инструкций для каждого пакет ВЕРСИИ от X до 1. Моей единственной идеи, чтобы выполнить эту задачу очень некрасиво, как:Обработка обработки входящих пакетов - вопросы проектирования
PACKET p = GetPacketFromSomewhere();
// p.VERSION is 3
if (p.VERSION > 0) {
// things for p.VERSION == 1
}
if (p.VERSION > 1) {
// things for p.VERSION == 2
}
if (p.VERSION > 2) {
// things for p.VERSION == 3
}
// set of if statements up to version N
Реальная ситуация такова, что , У меня есть пакет VERSIONS выше номера 10, и все еще может измениться. Новые пакеты VERSIONS будут добавлены, в то время как мне нужно сохранить обратную совместимость. Этот код плох, по крайней мере мне это не нравится. Вы, ребята, лучше знаете, как справиться с этим делом?
Ваше решение было бы уместным, если бы OP захотел выполнить один блок для любого номера версии. Похоже, он/она хочет выполнить каждый блок * до * данного номера; например для 'VERSION == 3', он должен выполнить блоки 0, 1 и 2. –
Спасибо. Не заметил. Изменен пост :) –
Я не думаю, что есть необходимость в std: map here. Простой вектор - с протокольной версией, имеющей индекс функций - должен быть достаточным. – MikeMB