Я пытаюсь использовать long_options [] для анализа различных параметров, введенных из терминала, в программу на C ++.Моя структура опций выглядит следующим образом:
static struct option long_options[] = {
// *name, has_arg, *flag, val
{"help", no_argument, 0, 'h'},
{"debug", no_argument, 0, 0},
{"seed", required_argument, 0, 's'},
...
}
Тогда я бы использовал getopt_long , чтобы прочитать аргументы следующим образом:
while (true) {
int option_index (0);
int c = getopt_long (argc, argv, "hs:t:iT:N:M:m:V:l:w:P:rR:b:d:a:", long_options, &option_index);
if (c == -1) break;
switch (c) {
case 'h':
print_help ();
case 's':
parameters.seed = atoi(optarg);
break;
case 0:
if (long_options[option_index].flag != 0) break;
else if (strcmp(long_options[option_index].name, "debug") == 0) parameters.debug = true;
...
break;
}
}
Аргументы передаются optarg , который, как я понимаю, имеет тип char * или std :: string, как показано выше.
Проблема возникает, когда я думаю о способе установки параметров опции с необходимым числом дваили больше аргументов.Например, я хотел бы установить опцию, которая позволяет пользователю удобно определять параметры распределения.Я надеюсь, что это будет вызвано из терминала следующим образом:
./program --distribution mean sd
./program --distribution mean sd n
Но похоже, что long_options ожидает только один аргумент по умолчанию, поэтому sd в приведенном выше примере ожидается, что он будет проанализирован как отдельный параметр option.
Как изменить это поведение по умолчанию?спасибо!