Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ boost::程序选项和ini文件中的多个部分_C++_Boost Program Options - Fatal编程技术网

C++ boost::程序选项和ini文件中的多个部分

C++ boost::程序选项和ini文件中的多个部分,c++,boost-program-options,C++,Boost Program Options,我正在尝试获取boost::program_选项以读取包含多个部分的ini文件: [slave] address=localhost port=1111 [slave] address=192.168.0.1 port=2222 有什么解决办法吗 提前谢谢 这个问题有几种解决办法。虽然一开始看起来这应该是一项简单的任务,但它通常相当复杂。这是因为节大致相当于名称空间;截面不等同于对象 [slave] address=localhost port=1111 [slave] address=

我正在尝试获取boost::program_选项以读取包含多个部分的ini文件:

[slave]
address=localhost
port=1111

[slave]
address=192.168.0.1
port=2222
有什么解决办法吗

提前谢谢

这个问题有几种解决办法。虽然一开始看起来这应该是一项简单的任务,但它通常相当复杂。这是因为节大致相当于名称空间;截面不等同于对象

[slave] address=localhost port=1111 [slave] address=192.168.0.1 port=2222 在不修改配置的情况下,将显示以下代码:

#包括
#包括
#包括
#包括
#包括
#包括
#包括
///@提供“存储到”值时的简短便利功能
///输入你的值。
///
///@param store_指向一个变量,该变量将在通知时保存解析后的值。
///
///@返回指向类型值的指针。
模板
boost::program\u options::键入的值*生成值(T*存储到)
{
返回boost::program\u options::value(存储到);
}
///@包含地址和端口的简短从属类型。
结构从机
{
std::字符串地址;
无符号短端口;
///@brief构造函数。
从机(std::字符串地址,
无符号短端口)
:地址,
港口
{}
};
///@从机的简短流插入运算符。
///
///@param stream正在插入从属服务器的流。
///@param是从对象。
///
///@返回对ostream的引用。
std::ostream和运算符*生成值(T*存储到)
{
返回boost::program\u options::value(存储到);
}
///@包含地址和端口的简短从属类型。
结构从机
{
std::字符串地址;
无符号短端口;
///@brief构造函数。
从机(std::字符串地址,
无符号短端口)
:地址,
港口
{}
};
///@从机的简短流插入运算符。
///
///@param stream正在插入从属服务器的流。
///@param是从对象。
///
///@返回对ostream的引用。
std::ostream和操作员
输出器
复制\u如果(先输入计算器,
最后输入,
输出结果,
谓词pred)
{
while(第一个!=最后一个)
{
if(pred(*first))
*结果+=*第一;
++第一,;
}
返回结果;
}
///@brief标记字符串。标记将由每个非报价的标记分隔
///@c分隔符中的字符\u个字符。空令牌被移除。
///
///@param输入要标记化的字符串。
///@param separator_characters要分隔的字符。
///
///@令牌的返回向量。
std::vectortokenize(常量std::string和输入,
常量标准::字符串和分隔符(字符)
{
typedef boost::转义\u列表\u分隔符分隔符\u类型;
分隔符\类型分隔符(“\\”,//转义字符。
分隔符,
“\”\”;//引号字符。
//将输入标记化。
boost::标记器标记(输入,分隔符);
//将非空标记从标记器复制到结果中。
std::vector结果;
复制if(tokens.begin()、tokens.end()、std::back_插入器(result),
!boost::bind(&std::string::empty,_1));
返回结果;
}
///@brief option_builder提供了一个一元运算符,可在中使用
///算法。
模板
类选项生成器
{
公众:
typedef ResultType result_type;
公众:
///@brief构造函数
选项生成器(const boost::program\u options::options\u description&options、,
建筑商(建筑商)
:选项(选项),
建筑商(建筑商)
{}
///@brief一元运算符,该运算符将解析@c值,然后委托
///向建筑商提供@c结果类型的构造。
模板
结果类型运算符()(常量T和值)
{
//标记该值,以便可以使用命令行解析器。
std::vectortokens=tokenize(值“=”);
//解析标记。
名称空间po=boost::program\u选项;
变量映射虚拟机;
po::store(po::command\u line\u解析器(令牌)。选项(选项)。运行(),
vm);
po::通知(vm);
//将对象构造委托给生成器。
返回生成器(vm);
}
私人:
常量boost::程序选项::选项描述和选项;
建筑商;
};
///@brief便利函数用于创建选项生成器类型。
模板
选项生成器生成选项生成器(
常量boost::程序选项::选项描述和选项,
建筑商(建筑商)
{
返回选项\u builder(选项,builder);
}
///@提供“存储到”值时的简短便利功能
///输入你的值。
///
///@param store_指向一个变量,该变量将在通知时保存解析后的值。
///
///@返回指向类型值的指针。
模板
boost::program\u options::键入的值*生成值(T*存储到)
{
返回boost::program\u options::value(存储到);
}
///@包含地址和端口的简短从属类型。
结构从机
{
std::字符串地址;
无符号短端口;
///@brief构造函数。
从机(std::字符串地址,
无符号短端口)
:地址,
港口
{}
};
///@从机的简短流插入运算符。
///
///@param stream正在插入从属服务器的流。
///@param是从对象。
///
///@返回对ostream的引用。
std::ostream和操作员从机;
std::transform(slave_configs.begin(),slave_configs.end(),
std::背面插入器(从属),
make_option_builder(slave_desc,make_slave));
//打印奴隶。
std::copy(slaves.begin()、slaves.end(),
std::ostream_迭代器(std::cout,“\n”);
}
产生与t相同的输出 [slave] address=localhost # slave.address[0] port=1111 # slave.port[0] [slave] address=192.168.0.1 # slave.address[1] port=2222 # slave.port[1] Slave address: localhost, port: 1111 Slave address: 192.168.0.1, port: 2222 [slaves] slave=localhost:1111 slave=192.168.0.1:2222 Slave address: localhost, port: 1111 Slave address: 192.168.0.1, port: 2222 [slaves] slave= --address localhost --port 1111 slave= --address = 192.168.0.1 --port=2222 Slave address: localhost, port: 1111 Slave address: 192.168.0.1, port: 2222 [slaves] slave = --address localhost --port 1111, --address 127.0.0.1 --port 1112 slave = --address 192.168.0.1 --port 2222