C++ CLI框架:快速便捷地编写控制台应用程序

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

C++ CLI框架:快速便捷地编写控制台应用程序



创建高质量的命令行界面(CLI)是C++开发的重要组成部分。通过argc/argv和getopt手动解析参数很快就会变得冗长且容易出错,尤其是在选项众多的情况下。专门的库——CLI框架——应运而生。它们能自动化解析、帮助信息生成、类型检查,并帮助编写更清晰、更易维护的代码。



在本文中,我们将介绍三个最流行且现代的C++ CLI框架:CLI11、cxxopts和argparse。您将了解它们的优势,看到代码示例,并能为您的项目选择合适的工具。



1. CLI11——现代标准



CLI11是一个仅头文件的库,被公认为C++11及更高版本的最佳解决方案之一。它提供了直观的API、强大的验证功能和自动帮助信息生成。



主要特性:

  • 仅头文件:无需编译——只需包含头文件即可。
  • 自动帮助信息:-h和--help标志立即可用。
  • 验证:内置和用户自定义的参数验证器(范围、正则表达式、文件存在性)。
  • 支持子命令:非常适合复杂的工具(如git或docker)。
  • 格式化:可自定义的帮助信息输出。


CLI11使用示例:

一个简单的应用程序,接受名称和可选的问候标志:

#include <CLI/CLI.hpp>#include <iostream>

int main(int argc, char** argv) { CLI::App app{"CLI11演示"};

std::string name; bool greet = false;

app.add_option("-n,--name", name, "您的姓名")->required(); app.add_flag("-g,--greet", greet, "显示问候语");

CLI11_PARSE(app, argc, argv);

std::cout << "您好," << name << "!" << std::endl; if (greet) { std::cout << "祝您愉快!" << std::endl; } return 0;}

工作原理:库自动解析参数,检查--name选项的必填性,并在调用./app --help时生成帮助信息。



2. cxxopts——简单轻量



cxxopts是另一个仅头文件的库,专注于极简和简单。它非常适合不需要子命令但代码可读性很重要的小型工具。



主要特性:

  • 简单的API:通过链式调用添加选项。
  • 自动类型转换:int、double、string等。
  • 支持位置参数。
  • 可自定义前缀:可以使用-或--。


cxxopts使用示例:

#include <cxxopts.hpp>#include <iostream>

int main(int argc, char** argv) { cxxopts::Options options("myapp", "cxxopts示例");

options.add_options() ("f,file", "文件名", cxxopts::value<std::string>()) ("v,verbose", "详细输出", cxxopts::value<bool>()->default_value("false")) ("h,help", "显示帮助信息");

auto result = options.parse(argc, argv);

if (result.count("help")) { std::cout << options.help() << std::endl;

推荐