Как Вы обрабатываете параметры командной строки и файлы конфигурации?

Вы можете просто нажать F8 во время перетаскивания (и инструменты разработчика открыты)

11
задан Frank 13 June 2009 в 04:30
поделиться

8 ответов

Что ж, мой ответ тебе не понравится. Я использую boost :: program_options . К интерфейсу нужно привыкнуть, но как только вы его освоите, он станет потрясающим. Просто не забудьте провести много модульного тестирования, потому что если вы ошибетесь в синтаксисе, вы получите ошибки времени выполнения.

И, да, я сохраню их в одноэлементном объекте (только для чтения). Я не думаю, что это зло в таком случае. Это один из немногих случаев, когда синглтон допустим.

5
ответ дан 3 December 2019 в 03:53
поделиться

В Google мы используем gflags . Он не обрабатывает файлы конфигурации, но для флагов это намного менее болезненно, чем использование getopt.

#include <gflags/gflags.h>
DEFINE_string(server, "foo", "What server to connect to");
int main(int argc, char* argv[]) {
    google::ParseCommandLineFlags(&argc, &argv, true);
    if (!server.empty()) {
        Connect(server);
    }
}

Вы помещаете DEFINE_foo в начало файла, который должен знать значение флага. Если другим файлам также необходимо знать значение, используйте в них DECLARE_foo . Также имеется неплохая поддержка тестирования, поэтому модульные тесты могут независимо устанавливать разные флаги.

Если другим файлам также необходимо знать значение, используйте в них DECLARE_foo . Также имеется неплохая поддержка тестирования, поэтому модульные тесты могут независимо устанавливать разные флаги.

Если другим файлам также необходимо знать значение, используйте в них DECLARE_foo . Также имеется неплохая поддержка тестирования, поэтому модульные тесты могут независимо устанавливать разные флаги.

11
ответ дан 3 December 2019 в 03:53
поделиться

Если вы работаете с Visual Studio 2005 в x86 и x64 Windows, в библиотеке SimpleLibPlus есть несколько хороших утилит синтаксического анализа командной строки. Я использовал его и нашел очень полезным.

1
ответ дан 3 December 2019 в 03:53
поделиться

Если Boost вам не по душе, GNU Gengetopt , вероятно, тоже, но ИМХО, это забавный инструмент, с которым можно повозиться.

И я стараюсь держитесь подальше от объектов глобальных параметров, я предпочитаю, чтобы каждый класс читал свою собственную конфигурацию. Помимо философии «Глобальные переменные - зло», есть тенденция к тому, что вся ваша конфигурация в одном месте становится постоянно растущим беспорядком, а также труднее определить, какие переменные конфигурации и где используются. Если вы сохраните конфигурацию ближе к тому месту, где она используется, станет более очевидным, для чего предназначена каждая из них, и ее легче поддерживать в чистоте.

(Что касается того, что я лично использую для всего, в последнее время это была проприетарная библиотека синтаксического анализа командной строки это написал кто-то другой в моей компании, но, к сожалению, это вам не очень помогает)

3
ответ дан 3 December 2019 в 03:53
поделиться

GNU getopt довольно хорош. Если вам нужен C ++, рассмотрите getoptpp , который является оболочкой для встроенного getopt. Что касается файла конфигурации, вы должны попытаться сделать его настолько глупым, насколько это возможно, чтобы разбор был легким. Если вы немного внимательны, вы можете захотеть использовать yaac и lex, но это будет действительно большие деньги для небольших приложений.

Я также хотел бы предложить вам поддерживать как файлы конфигурации, так и параметры командной строки в вашем приложении. Файлы конфигурации лучше подходят для тех опций, которые нужно менять реже. Параметры командной строки удобны, когда вы хотите передать немедленно изменяющиеся аргументы (обычно при создании приложения, которое будет вызываться какой-либо другой программой).

1
ответ дан 3 December 2019 в 03:53
поделиться

Не уверен в синтаксическом анализе аргументов командной строки. Мне не нужны были очень богатые возможности в этой области, и я обычно использовал собственные, чтобы сэкономить, добавляя больше зависимостей в свое программное обеспечение. В зависимости от ваших потребностей, вы можете или не захотите пробовать этот маршрут. Программы на C ++, которые я написал, обычно не вызываются из командной строки.

С другой стороны, для файла конфигурации вы действительно не можете превзойти формат на основе XML. Он читабельный, расширяемый, структурированный и т. Д. :) Плюс существует множество анализаторов XML. Несмотря на то, что это библиотека C, я предпочитаю использовать libxml2 с xmlsoft.org.

0
ответ дан 3 December 2019 в 03:53
поделиться

Что касается командных строк и C ++, я был поклонником TCLAP: Templatized Command Line Argument Parser.

http://sourceforge.net/projects/tclap/

6
ответ дан 3 December 2019 в 03:53
поделиться

Попробуйте Apache Ant . Его основное использование - проекты Java, но в нем нет ничего Java, и его можно использовать практически для чего угодно.

Использование довольно просто, и вы также получили большую поддержку сообщества. Он действительно хорош в том, чтобы делать то, что вы просите.

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

-4
ответ дан 3 December 2019 в 03:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: