用boost 的program opti…

要将原来程序里面的配置文件模块从c迁移到c++, 虽然自己也尝试写了个,但为了更好的跨平台性,还是决定使用boost库中的program option。

简单提一下安装和编译:
1.下载boost的源码包
2.

./bootstrap.sh

sudo ./b2 install

3. 如果提示没有patchlevel.h

sudo apt-get install python-dev

4. 如果提示没有bzlib.h

sudo apt-get install libbz2-dev

5. 编译命令如下:

g++ -o first first.cpp -I /usr/local/include/boost -L /usr/local/lib/ -lboos    t_program_options

注意为了更好的跨平台, 把-I 和 -L放在 -o first first.cpp 的后面。


然后进入正题,如何用boost 的program option(下文所写为PO)库读未知section的配置文件。

boost的PO在解析配置文件前需要先定义配置文件的描述options_description,例如

options_description config("Configuration");
config.add_options()

    ("section1.key2", value< vector >()->notifier( range_notify ), "Ranges for partition");

boost本身支持section和重名key。 例如:

[section1]

key1=v1

key2=v2

key2=v22

其实boost的PO把它看作

 section1.key1=v1

 section1.key2=v2 v22  (key2的值类型是一个数组)

对于未知section的配置文件,我们需要在另一个配置文件中描述它。

例如

conf1:

sections=section1

sections=section2

conf2:

[section1]

key1=v1

[section2]

key1=v1

 然后先读conf1,根据读到的sections的内容动态的去生成conf2的配置文件描述,然后在读conf2.

示例的配置文件如下:

proxy.conf:

# range config
partition_range = 1
partition_range = 2
partition_range = 3

# backend server config
rwserver = s-2-8
rdserver = a-2-9
rdserver = b-2-9

# config for detail config file
detail_conf = proxy_detail.conf
schemas=schema1
schemas=schema2



proxy_detail.conf:

[schema1]
name = s1

[schema2]
name = s2

示例代码如下:

  options_description only_config("Only Configuration");
  only_config.add_options()
    ("partition_range", value< vector >()->notifier( range_notify ), "Ranges for partition")
    ("rwserver", value()->required(), "RW server")
    ("rdserver", value< vector >(), "RD server")
    ("schemas", value< vector >(), "Name and num of schemas")
    ("detail_conf", value()->default_value("proxy_detail.conf"),
     "More detail and business related configuration file.")
    ;

   ifstream ifs(config_file.c_str());

   if (!ifs)
  {
    cout << "can not open config file: " << config_file << "\n";
    return 0;
  }
  else
  {
    store(parse_config_file(ifs, only_config), vm);
    notify(vm);
    vector schemas = vm["schemas"].as< vector >();
    options_description detail_config("Detail conf");
    for (i = 0; i < schemas.size(); i++)
    {
      string tmp = schemas[i] + ".name";
      const char *name = const_cast(tmp.c_str());
      detail_config.add_options()
        (name, value(), "Name of schema")
        ;
    }
    ifs.close();
    schema_config_file = vm["detail_conf"].as< string >();
    ifstream ifs2(schema_config_file.c_str());
    if (!ifs2)
    {
      cout << "can not open detail config file: " << schema_config_file << "\n";
      return 0;
    }
    store(parse_config_file(ifs2, detail_config), vm);
    notify(vm);
    ifs2.close();
  }

内容概要:该研究通过在黑龙江省某示范村进行24小时实地测试,比较了燃煤炉具与自动/手动进料生物质炉具的污染物排放特征。结果显示,生物质炉具相比燃煤炉具显著降低了PM2.5、CO和SO2的排放(自动进料分别降低41.2%、54.3%、40.0%;手动进料降低35.3%、22.1%、20.0%),但NOx排放未降低甚至有所增加。研究还发现,经济性和便利性是影响生物质炉具推广的重要因素。该研究不仅提供了实际排放数据支持,还通过Python代码详细复现了排放特征比较、减排效果计算和结果可视化,进一步探讨了燃料性质、动态排放特征、碳平衡计算以及政策建议。 适合人群:从事环境科学研究的学者、政府环保部门工作人员、能源政策制定者、关注农村能源转型的社会人士。 使用场景及目标:①评估生物质炉具在农村地区的推广潜力;②为政策制定者提供科学依据,优化补贴政策;③帮助研究人员深入了解生物质炉具的排放特征和技术改进方向;④为企业研发更高效的生物质炉具提供参考。 其他说明:该研究通过大量数据分析和模拟,揭示了生物质炉具在实际应用中的优点和挑战,特别是NOx排放增加的问题。研究还提出了多项具体的技术改进方向和政策建议,如优化进料方式、提高热效率、建设本地颗粒厂等,为生物质炉具的广泛推广提供了可行路径。此外,研究还开发了一个智能政策建议生成系统,可以根据不同地区的特征定制化生成政策建议,为农村能源转型提供了有力支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值