Мы создаем DLL с использованием C ++. Поскольку у нас есть 400 случаев, размер DLL увеличивается в размере, поэтому есть ли какой-либо альтернативный способ использования вместо переключателя
Есть ли альтернативный способ написания кода вместо использования оператора switch в С++?
- Не могли бы вы также указать тип действия, которое вы предпринимаете, и значения, которые вы проверяете при переключении. 15.02.2011
- Многое зависит от того, что делает код. 15.02.2011
- Не могли бы вы подробнее объяснить контекст? Зачем ты это делаешь? Вы должны были остановиться и искать альтернативы намного раньше, скажем, в 8 или 10 случаях. 15.02.2011
- Пример кода поможет. 15.02.2011
- Я немного озадачен, почему размер переключателя связан с размером DLL. Что делает этот переключатель, что перевешивает остальную часть кода в DLL? Вы можете объяснить? 15.02.2011
- Я хотел бы уменьшить размер DLL 15.02.2011
- Вы уменьшите размер довольно сильно, если выделите почти идентичные блоки кода в последних четырех блоках
if
в отдельную функцию и замените сумасшедший код для очистки карты наtaxData_PA01953.clear()
- особенно если все 400 функций написаны по аналогии. 15.02.2011
Ответы:
Зависит от типа данных, который вы переключаете. Если это плотный диапазон int, используйте таблицу поиска, в которой хранятся указатели на функции. В других случаях используйте std::map
от переключаемых значений к указателям на функции.
Я бы сказал, что проблема не в переключении.
Между вашими ветвями очень много дублирования кода (я полагаю, у вас есть еще около 395), поэтому вы должны иметь возможность уменьшить свою DLL, абстрагируя общие части; единственная разница заключается в том, какое поле вы извлекаете и какие вычисления вы выполняете с ним. Подавляющее большинство вашего кода можно использовать между ветвями, если все они так же похожи, как и опубликованные вами.
Если ваш компилятор не выполняет никакого объединения строк, поэтому у вас есть несколько экземпляров ваших шаблонов запросов, это тоже не помогает.
Выделите все ваши условия, запросы к БД и конкатенации строк в функции и посмотрите, куда это вас приведет.
Вы должны сделать это в любом случае, так как это значительно облегчит обслуживание и дальнейшее расширение.
Размер корпуса коммутатора и размер Dll не должны иметь прямого отношения. Единственный способ контролировать размер - это сократить общий код и правильно использовать STL, помимо опций оптимизации по умолчанию, которые дает компилятор.