#c #boost-program-options
Вопрос:
У меня есть некоторый устаревший код C , который принимает входные параметры. Он представлен в следующем формате:
int main(int argc,char* argv[])
{
parse_args(argc,argv);
return 0;
}
Входные данные должны были быть указаны в следующем формате:
$ ./a.out -f sample.txt -o out.xml
Теперь мне нужно изменить приведенный выше код, чтобы иметь возможность принимать входные данные, указанные в файле конфигурации ввода, с помощью функции boost::program_options::parse_config_file, чтобы входные данные можно было указать как:
$ ./a.out -cfg config.cfg
Где содержимое файла «config.cfg» выглядит следующим образом:
f=sample.txt
o=out.xml
Я хотел бы сделать это без внесения каких-либо изменений в parse_args()
функцию.
Следовательно, не могли бы вы предложить метод преобразования входных аргументов, проанализированных из файла cfg (считайте, что это вектор строк), в формат, эквивалентный char* argv[]
формату ?
Комментарии:
1. Преобразуйте результат
parse_config_file()
вstd::vector<char*>
строки в стиле C{"f", "sample.txt", "o", "out.xml"}
, т. Е. Затем вы можете перейтиvector.data()
иvector.size()
кparse_args()
2. @RemyLebeau: Не забудь нажать
nullptr
«а».argv
является nullptr-прекращено3. @MSalters
argc
указывает количествоchar*
s вargv
, значение null не требуется4. @RemyLebeau: Вы смотрите на это с неправильной стороны контракта.
main
устанавливает последний элементargv
tonullptr
, и реализацияparse_args
может зависеть от этого, или она может зависеть отargc
этого . Да, какmain
это делается, технически избыточно, но именно так это работает. Этот код пытается эмулировать один и тот жеargv[]
массив, поэтому он должен иметь одинаковую избыточность.