1

我搜索了高低,找不到这个。打印帮助的CLI11方法是什么。我希望能够在用户输入错误信息时向他们显示帮助。

另外,当没有给出选项时,CLI11 会抛出异常吗?如果没有,你怎么知道有多少选择?

4

1 回答 1

1

我将回答我自己的问题,以便将来对其他人有所帮助。

我在网上遇到了一个暗示解决方案的代码片段并引导我找到答案。总之,没有CLI11的方法可以直接打印出帮助文本。但是,有两种方法可以以编程方式打印帮助文本。

尝试/捕获块

这是 CLI11 本机方法。设置完所有选项定义后,定义一个 try/catch 块,如下所示:

CLIx::App app( argc,
               argv );
         .
         .
         .
try
    {
    app.parse( argc,
               argv);
    }
catch( const CLI::CallForHelp &e )
    {
    exit( app.exit( e ) );
    }

“exit(app.exit(e));”行 调用应用程序解析器方法“exit”,该方法打印帮助文本并返回错误代码以退出程序。然后,当您想要打印帮助文本时,只需抛出:

throw CLI::CallForHelp();

这个异常在任何文档中都没有描述,只有通过爬取 CLI11 的源代码才能发现。

有点直接,有点笨拙

前面的方法假设您想在打印帮助文本后退出程序。在我的情况下,这是行不通的,因为作为我程序的一部分,我让用户在交互式提示符下输入带有选项的命令。相反,您可以使用假异常直接调用 CLI11 的退出方法:

app.exit( CLI::CallForHelp() );

有点傻,但完成了工作。

同样,这在任何地方都没有记录,只有通过 CLI11 代码才能发现。

最后,尽管有这个小疣,我强烈推荐CLI11。它易于使用且功能强大。

于 2021-07-11T14:00:03.400 回答