#c #parsing #command-line-parser
Вопрос:
Я искал повсюду и не могу найти это. Каков метод CLI11 для распечатки справки. Я хочу иметь возможность показывать пользователю справку, когда он ввел неверную информацию.
Комментарии:
1. Что такое cli11??
2. @Alan: По-видимому, это библиотека для разбора аргументов. Я добавил ссылку, прямо из веб-поиска.
3. CLI11-это пакет для анализа командной строки. И да, я уже знаю об этой странице об использовании CLI11, а не о том, какой метод CLI11 используется для программного вывода текста справки для создаваемого вами инструмента. Вы можете использовать параметры командной строки-h, —help для вывода текста справки в вашем инструменте. Но я должен прогматически выводить этот текст из своего инструмента.
4. @rtcdude: я догадался, что вы знали эту страницу, я добавил ссылку из вежливости к другим читателям вопроса, которые, возможно, не были знакомы с ней, например, к человеку, который спрашивал об этом.
Ответ №1:
Я наткнулся в сети на фрагмент кода, который намекал на решение и привел меня к ответу. Короче говоря, нет метода CLI11 для прямой распечатки текста справки. Однако существует два способа печати текста справки программным способом.
блок try/catch
Это собственный метод CLI11. После настройки всех определений параметров определите блок try/catch, как в:
CLIx::App app( argc,
argv );
.
.
.
try
{
app.parse( argc,
argv);
}
catch( const CLI::CallForHelp amp;e )
{
exit( app.exit( e ) );
}
В строке «выход( приложение.выход( e))» вызывается метод анализатора приложений «выход», который выводит текст справки и возвращает код ошибки для выхода из программы. Затем, когда вы хотите, чтобы был напечатан текст справки, просто сделайте бросок:
throw CLI::CallForHelp();
Это исключение никогда не описано в документации, и оно обнаруживается только путем обхода источника CLI11.
как — то прямолинейно, немного неуклюже
Предыдущий метод предполагает, что вы хотите выйти из программы после печати текста справки. В моем случае это не сработало бы, так как у меня есть пользователи, вводящие команды с опциями в интерактивном приглашении как часть моей программы. Вместо этого вы можете вызвать метод выхода CLI11 напрямую с поддельным исключением:
app.exit( CLI::CallForHelp() );
Немного глуповато, но делает свою работу.
Опять же, нигде это нигде не задокументировано, и это можно обнаружить, только пройдя через код CLI11.
Наконец, несмотря на эту маленькую бородавку, я настоятельно рекомендую CLI11. Он прост в использовании и довольно мощный.