gpt4 book ai didi

c++ - boost::Program_options 如何在值中支持散列字符?

转载 作者:行者123 更新时间:2023-11-30 05:40:05 26 4
gpt4 key购买 nike

我正在尝试在配置文件的值中使用井号 ('#')。

我的用例是一个音乐程序,其中的值给出了吉他乐谱的调音。因此,在值中支持“#”是强制性的,并且不支持任何解决方法,这与可以使用“b”模拟的平面不同。

我尝试了以下语法:

tuning.1=d#
tuning.1=d\#
tuning.1=d##

在所有这些情况下,键 tuning.1 接收值 d,这当然不是本意。

是否可以在键的值中加入井号?我似乎无法在 boost 文档或在线上找到任何相关信息。还是我应该求助于编写自定义解析器?

最佳答案

我认为您无法更改 boost::program_options 解析值的方式,因为文档 says # 字符引入了一条一直到行尾的注释

但是,您可以在解析配置文件时将散列字符转换为另一个散列字符,使用来自 boost::iostreams 的自定义过滤器。请参阅有关 filter usage 的文档和 input filters .这是我写的一个非常基础的代码,它用 @ 替换了 #:

#include <boost/iostreams/filtering_stream.hpp>

struct escape_hash_filter: public boost::iostreams::input_filter
{
template <typename Source>
int get (Source& src)
{
int c = boost::iostreams::get (src);
if ((c == EOF) or (c == boost::iostreams::WOULD_BLOCK))
return c;
return ((c == '#')? '@': c;
}
};

使用示例:

std::ifstream in {"example.cfg"};
boost::iostreams::filtering_istream escaped_in;
escaped_in.push (escape_hash_filter {});
escaped_in.push (in);

po::store (po::parse_config_file (escaped_in, desc), vm);

关于c++ - boost::Program_options 如何在值中支持散列字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31921241/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com