Аргумент getopt зависит от другого

есть ли встроенный способ сделать аргумент зависимым от другого при использовании getopt? Например, у меня есть настройка переключателя, и все работает нормально, но мне нужен мой аргумент -m (длина цепочки markov), прежде чем я читаю текстовый файл (-i).

Другими словами, я хотел бы убедиться, что другие аргументы не установлены при обработке моего входного аргумента.

Небольшая выдержка:

    while ((opt = getopt_long(argc, argv, "i:shm:", long_options, &option_index))
!= -1)
{
switch (opt) {
case 'i':
inputEnglish.ReadFile((string)optarg);
break;

case 'm':
inputEnglish.setMarkovLength(atoi(optarg));
break;

case 's':
break;

case 'h':
printHelp();
break;

case '?':
cout << "dfgdfgdf" << endl;
return 0;
break;

default:
printHelp();
return 0;
break;
}
}

Если нет никаких встроенных способов, есть ли у вас чистый способ сделать это? Чистый код важнее, чем эффективность. Спасибо за любую помощь!

0

Решение

Сохраните имя файла и обработайте его только после обработки всех аргументов командной строки. Обычно это лучший подход — код getopt должен только анализировать, а не обрабатывать.

В качестве альтернативы, и так работает большинство команд, не используйте флаг для имени файла … поэтому используется pgm -m foo filename. Затем вы просто обрабатываете оставшиеся аргументы (от argv [optind] до argv [argc-1]) как имена файлов после обработки всех флагов. Это способствует распространенной ситуации, как у вас, при обработке файла в зависимости от значений флага.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]