c ++有一个很好的通用选项类吗?

时间:2011-01-28 00:21:33

标签: c++

每次我写另一个小型c ++玩具程序时,我都会遇到一个易于使用的小型选项/参数类。以下是它应该做的事情:

  • 至少接受整数,双打,字符串参数
  • 添加新选项的简便方法
  • 便携,小巧,快速
  • 自由
  • 从文件和/或命令行中读取选项
  • 参数的上限和下限
  • 以及我现在没想到的所有其他有用的东西

我想要做的是将指向此类的指针传递给构建器和所有策略对象,以便他们可以读取我正在运行的算法的参数(例如,哪种算法,最大迭代次数等)< / p>

有人能指出我实现至少完成其中一些事情的实现吗?

2 个答案:

答案 0 :(得分:9)

Boost Program-Options很漂亮。我认为除了可能的边界验证之外,它会列出您列表中的所有内容。但即便如此,您也可以非常轻松地提供自定义验证器。

更新:正如@stefan在评论中正确指出的那样,这也是“小”的失败!如果你静态链接它,它会为你的二进制文件增加一个很重要的块。

答案 1 :(得分:0)

您可能需要考虑以JSON格式存储配置。虽然从命令行阅读JSON有点尴尬,但它仍然完全可行,甚至相当清晰。除此之外,您还可以获得很多灵活性,包括嵌套配置选项,反序列化复杂数据类型的工具等。

有许多用于将JSON反序列化为C ++的库,请参阅例如其中一些this discussion and comparison。有些很小,有些很快(虽然你实际上并不需要它们很快 - 配置数据非常小),大多数都非常便携。可以找到一个长列表和一些基准测试结果(尽管不是特征比较)here;其中一些库实际上可能适合用于阅读配置选项,尽管这只是一个疯狂的猜测。