Способ печати справочного текста CLI11

#c #parsing #command-line-parser

Вопрос:

Комментарии:

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. Он прост в использовании и довольно мощный.