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 格式规则: ...