get_option: C++ 配置文件解析,一文从入门到精通

引言 几乎每个非平凡的程序都需要配置参数:输入文件路径、算法阈值、输出格式、模型参数……硬编码这些值会让程序失去灵活性,而手写解析逻辑又繁琐且容易出错。 getoption 是 utilsxx 库中的轻量级配置解析组件。它采用声明式设计理念:你先声明程序需要哪些参数、哪些是必填的、哪些参数属于互斥组,然后从文件或字符串向量中读取配置,getoption 会自动完成解析、校验和类型转换。本文将带你从基础用法到高阶技巧,彻底掌握这个工具。 一、设计理念:声明式配置管理 传统的配置解析往往是"命令式"的:读一行、判断键名、手动转换类型、检查是否缺失。getoption 将其转变为"声明式": // 1. 声明:我的程序需要这些参数 getoption gopt; gopt.add_options({"range", "interval", "output"}, {true, true, false}); // 2. 读取:从配置文件加载 gopt.read_options("config.txt"); // 3. 校验:自动检查必填项和互斥组 gopt.check_mandatory(); // 4. 使用:直接获取已转换类型的值 auto range = gopt.get_value<std::string>("range"); auto weight = gopt.get_values<double>("weight", '|', '/'); 这种设计的优势: 集中管理:所有参数定义在一处,一目了然 自动校验:必填项、互斥组自动检查,无需手写 if 判断 类型安全:模板函数自动完成字符串到目标类型的转换 别名支持:一个参数可以有多个名称(如 model-file/ModelFile/model_file) 二、快速上手 2.1 配置文件格式 getoption 使用简洁的 key-value 格式: # 以 # 开头的行是注释,会被自动跳过 range = 100/1000/200/2000/full_range interval = 10/10 weight = 120.12/232/114.2 model-file = test.txt # 空行也会被跳过,不影响解析 # 同一个 key 可以出现多次,值会自动合并 model-tag = model1 model-tag = model2 model-tag = model3 out-model = example.msh 格式规则: ...

May 10, 2026 · 张壹

progress_bar: C++ 终端进度条,一文从入门到高阶

引言 命令行程序在处理耗时任务时,一个直观的进度条能极大提升用户体验。然而 C++ 标准库并未提供终端进度条组件,开发者要么引入重型第三方库,要么自己手写 ANSI 转义码控制光标。 progress_bar 是 utilsxx 库中的轻量级终端进度条组件,它零依赖、跨平台、开箱即用,同时提供了 indicators 第三方库的集成示例,满足不同场景需求。本文将带你一文看懂如何使用它,以及有哪些实用技巧。 一、快速上手:三行代码显示进度条 #include "progress_bar.hpp" int main() { utilsxx::progress_bar bar("Processing", 101); for (int i = 0; i < 101; ++i) { bar.tick(); // 每步调用一次 // 你的耗时操作... } return 0; } 终端输出效果: Processing |████████████████████████████████████████░░░░░░░░░░| 75.0% 二、核心设计 2.1 两种显示模式 模式 枚举值 说明 完整模式 Full 进度条 + 百分比数字(默认) 数字模式 NumberOnly 仅显示百分比数字,无图形条 2.2 颜色系统 支持已完成部分和未完成部分分别设置颜色: 颜色 枚举值 ANSI 效果 白色 White 默认粗体 绿色 Green 粗体绿色 红色 Red 粗体红色 蓝色 Blue 粗体蓝色 黄色 Yellow 粗体黄色 2.3 智能宽度适配 进度条长度自动根据终端宽度计算,无需手动调整: ...

May 10, 2026 · 张壹