Это мой любимый способ работы с командной строкой, особенно, но определенно не только тогда, когда эффективность является проблемой. Это может показаться излишним, но я думаю, что у этого недостатка есть несколько недостатков.
Использование gperf для эффективной обработки командной строки C / C ++
Недостатки:
- Сначала нужно запустить отдельный инструмент, чтобы сгенерировать код для хеш-таблицы в C / C ++
- Нет поддержки для определенных интерфейсов командной строки. Например, будет сложно реализовать систему сокращений posix «-xyz», объявляющую несколько опций одним штрихом.
Преимущества:
- Ваши параметры командной строки хранятся отдельно от вашего кода C ++ (в отдельном файле конфигурации, который не нужно читать во время выполнения, только во время компиляции).
- Все, что у вас есть в вашем коде, это ровно один переключатель (включающий значения enum), чтобы выяснить, какой вариант у вас есть
- Эффективность - O (n), где n - количество опций в командной строке, а количество возможных опций не имеет значения. Возможно, самой медленной частью является реализация переключателя (иногда компиляторы, как правило, реализуют их как блоки, снижая их эффективность, хотя это маловероятно, если вы выберете смежные значения, см. эту статью об эффективности переключателя )
- Память, выделенная для хранения ключевых слов, достаточно велика для набора ключевых слов и не больше.
- Также работает в C
Используя IDE, такую как eclipse, вы, вероятно, можете автоматизировать процесс запуска gperf, поэтому единственное, что вам нужно сделать, это добавить опцию в файл конфигурации и в оператор switch и нажать build ...
Я использовал командный файл для запуска gperf, а также для очистки и добавления include guard с sed (для файла .hpp, сгенерированного gperf) ...
Итак, очень лаконичный и чистый код в вашем программном обеспечении и один автоматически сгенерированный файл хеш-таблицы, который вам не нужно менять вручную. Я сомневаюсь, что boost :: program_options действительно побьет это даже без эффективности в качестве приоритета.