Nano Hash - криптовалюты, майнинг, программирование

Есть ли альтернативный способ написания кода вместо использования оператора switch в С++?

Мы создаем DLL с использованием C ++. Поскольку у нас есть 400 случаев, размер DLL увеличивается в размере, поэтому есть ли какой-либо альтернативный способ использования вместо переключателя

15.02.2011

  • Не могли бы вы также указать тип действия, которое вы предпринимаете, и значения, которые вы проверяете при переключении. 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

Ответы:


1

Зависит от типа данных, который вы переключаете. Если это плотный диапазон int, используйте таблицу поиска, в которой хранятся указатели на функции. В других случаях используйте std::map от переключаемых значений к указателям на функции.

15.02.2011
  • В любом случае компилятор должен преобразовать плотный диапазон int в таблицу поиска. 15.02.2011
  • Это просто делает код более неясным и трудным для чтения, поскольку реализация уже делает это внутри. 15.02.2011

  • 2

    Я бы сказал, что проблема не в переключении.

    Между вашими ветвями очень много дублирования кода (я полагаю, у вас есть еще около 395), поэтому вы должны иметь возможность уменьшить свою DLL, абстрагируя общие части; единственная разница заключается в том, какое поле вы извлекаете и какие вычисления вы выполняете с ним. Подавляющее большинство вашего кода можно использовать между ветвями, если все они так же похожи, как и опубликованные вами.
    Если ваш компилятор не выполняет никакого объединения строк, поэтому у вас есть несколько экземпляров ваших шаблонов запросов, это тоже не помогает.

    Выделите все ваши условия, запросы к БД и конкатенации строк в функции и посмотрите, куда это вас приведет.

    Вы должны сделать это в любом случае, так как это значительно облегчит обслуживание и дальнейшее расширение.

    15.02.2011

    3

    Релевантно: размер моей библиотеки Dll увеличился из-за появления больших случаев переключения, как я могу уменьшить размер моей библиотеки DLL (MSVC C++)?

    15.02.2011
  • Я не уверен, что 400 if-else будут более читабельными. 15.02.2011
  • Даже при использовании этой моей DLL размер не уменьшился 15.02.2011

  • 4

    Размер корпуса коммутатора и размер Dll не должны иметь прямого отношения. Единственный способ контролировать размер - это сократить общий код и правильно использовать STL, помимо опций оптимизации по умолчанию, которые дает компилятор.

    16.02.2011
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..