`

program_options读命令行和配置文件

 
阅读更多
#include <boost/program_options.hpp>
#include <string.h>
#include <iostream>
#include <fstream>
#include <map>

using namespace std;
using namespace boost;

namespace bpo = boost::program_options;

/*
config.ini:
p2p-endpoint = 0.0.0.1:31010

rpc-endpoint = 0.0.0.0:38090

*/
int main(int argc,char** argv)
{
    cout << "cmd line:" << endl;
    bpo::options_description desc("Allowed options");
    desc.add_options()
            ("help", "produce help message")
            ("df_value", bpo::value<string>()->default_value("123"), ""); //give default

    bpo::variables_map cmdValueMap;
    bpo::store(bpo::parse_command_line(argc, argv, desc), cmdValueMap);
    bpo::notify(cmdValueMap);

    if(cmdValueMap.count("help")){
        cout<<desc<<endl;
    }
    if(cmdValueMap.count("df_value")){
        cout << "df_value:" << cmdValueMap["df_value"].as<string>() << endl;
    }

    cout << endl;
    cout << "直接读取文件配置:" << endl;
    boost::program_options::options_description options("Graphene Witness Node");
    bpo::variables_map fileValueMap;
    options.add_options()
             ("p2p-endpoint", bpo::value<string>(), "Endpoint for P2P node to listen on")
             ("rpc-endpoint", bpo::value<string>(),"aaa")
             ("genesis-json", bpo::value<string>()->default_value("my-genesis.json"),"genesis-json");

    bool useIfStream = true;//both is ok
    if(useIfStream)
    {
        ifstream ifs("config.ini");
        boost::program_options::store(boost::program_options::parse_config_file(ifs,options), fileValueMap);
    }else
    {
        boost::program_options::store(boost::program_options::parse_config_file<char>("config.ini",options, true), fileValueMap);
    }
    boost::program_options::notify(fileValueMap);

    if(fileValueMap.count("p2p-endpoint")){
        cout << fileValueMap["p2p-endpoint"].as<string>() << endl;
    }
    if(fileValueMap.count("rpc-endpoint")){
        cout << fileValueMap["rpc-endpoint"].as<string>() << endl;
    }
    if(fileValueMap.count("genesis-json")){
        cout << fileValueMap["genesis-json"].as<string>() << endl;
    }

    cout << endl;
    cout << "遍历valueMap:" << endl;
    for(bpo::variables_map::iterator iter = fileValueMap.begin(); iter != fileValueMap.end(); ++iter){
        cout << iter->first << ":" << iter->second.as<string>() << endl;
    }
}




执行:./a.out --help

cmd line:
Allowed options:
  --help                produce help message
  --df_value arg (=123)

df_value:123

直接读取文件配置:
0.0.0.1:31010
0.0.0.0:38090
my-genesis.json

遍历valueMap:
genesis-json:my-genesis.json
p2p-endpoint:0.0.0.1:31010
rpc-endpoint:0.0.0.0:38090
分享到:
评论

相关推荐

    Boost.orgprogram_options模块_C++_Shell_下载.zip

    其中一个重要的模块是`program_options`,它允许程序员轻松地处理命令行参数和配置文件选项。这个模块尤其适用于创建具有灵活用户界面的命令行应用程序,使得用户能够自定义程序的行为。 `program_options`模块的...

    program_options:Boost.org program_options模块

    程序选项是,它允许通过常规方法(例如命令行和配置文件)从用户定义和获取(名称,值)对。 它与getopt_long大致相似,但可用于C ++。 执照 根据分发。 特性 C ++ 03 需要链接 建置状态 (进行中...) 分支 ...

    boost-program-option-training

    `boost::program_options`提供了一种方便的方式来解析命令行参数和读取配置文件。它支持基本类型如整数、浮点数和字符串,以及自定义类型的选项。在C++代码中,你需要先声明你要解析的选项,然后在解析参数时,库会...

    哈密顿回路.xcodeproj_CCF命令行处理_

    例如,一个命令行工具可能会有一个`-v`或`--verbose`选项来开启详细输出,一个`-f`或`--file`选项来指定配置文件路径。 总的来说,通过理解命令行参数的处理,开发者可以创建灵活且可定制的程序。在“哈密顿回路....

    C++命令行参数的实现方法及使用方法,代码详细,执行正确。

    执行程序时,经常会用到命令行参数传递参数这种方式,今天实战一个命令行参数的从头到尾。 博文虽长,但均为干货。...program options是一系列pair组成的选项列表,它允许程序通过命令行或配置文件来读取这些参

    为firefox创建其他的配置文件

    - **使用Selenium创建Firefox配置文件**:可以通过Selenium WebDriver API来创建和管理Firefox配置文件,这样可以在测试脚本中动态地更改浏览器设置。 - **Java示例代码**:下面是一个简单的示例,展示了如何使用...

    C++ boost开发教程

    5. **Boost.Program_options**:帮助解析命令行参数,使得程序更加灵活和易于配置。 6. **Boost.Date_Time**:提供日期和时间处理功能,支持多种格式的日期时间表示和转换。 #### 四、Boost库的安装与配置 1. **...

    fastcopy命令行参数解释

    该命令将同步 `C:\Windows` 和 `C:\Program Files` 目录下的文件到 `D:\BackupFolder` 目录,并且在复制完成后自动关闭FastCopy窗口,同时显示复制过程的信息。 通过上述详细介绍,我们可以看出FastCopy提供了非常...

    从Windows命令行快速操作注册表

    本文详细介绍了如何利用命令行工具(如`RegFind`和`reg`命令)来高效地操作Windows注册表。通过这些工具,用户可以在不依赖图形界面的情况下对注册表进行精确控制,这对于系统管理员或开发人员来说尤其有价值。掌握...

    编译好的完整boost库

    7. **程序选项解析**:Boost.Program_Options库帮助解析命令行参数和配置文件。 8. **序列化**:Boost.Serialization库可以将对象序列化为文件或流,便于存储和恢复。 9. **信号和槽**:Boost.Signals库实现了类似Qt...

    VS2013编译的boost 1.60库,含32位和64位的动态库和静态库

    7. **程序工具库**:Boost.Program_options提供了命令行参数和配置文件解析功能,使应用程序的配置更加灵活。 8. **数学和统计库**:Boost.Math包含了一些数学函数和统计工具,如特殊函数、随机数生成等,为科学...

    bugzilla配置文件和安装模块

    2. 配置Apache:编辑Apache的配置文件httpd.conf,确保已启用对`.cgi`文件的支持。添加以下内容到配置文件: ``` ScriptAlias /bugzilla/ "C:/Bugzilla/" Options +ExecCGI -Indexes AllowOverride All ...

    tcpdump 源代码分析

    该文件中,`main()`函数扮演着中心角色,它初始化全局变量`gndo`,一个`struct netdissect_options`类型的结构体,用于存储用户指定的选项标志与配置参数。 #### 二、`struct netdissect_options`解析 `struct ...

    如何在Asp.net core 6 的 Program.cs 中读取 appsettings.json

    在本教程中,我们将探讨如何在 ASP.NET Core 6 的 `Program.cs` 文件中读取和使用 `appsettings.json` 配置文件。 首先,确保你的项目已经引用了必要的 NuGet 包,这些包包括: 1. `Microsoft.Extensions....

    matlab所依赖的boost_*****.dll文件文件打包.zip

    8. boost_program_options-vc120-mt-1_56.dll:处理命令行参数和配置文件的选项,可能用于MATLAB的脚本或应用程序接口。 9. boost_graph-vc120-mt-1_56.dll:图论相关的算法库,对于处理复杂网络结构很有帮助。 10. ...

    boost_1_46_1

    12. **程序工具库**:Boost.Program_options库用于解析命令行选项和配置文件,使得程序的参数设置更加人性化。 13. **测试库**:Boost.Test库提供了完善的单元测试框架,便于编写和组织测试代码,确保软件质量。 ...

    qyfq.rar_系统编程

    在实际应用中,`CmdLine`可能使用了现成的库,如Boost.Program_options或者GNU Getopt,或者自定义了一个解析器来处理命令行参数。这样的设计使得程序可以根据用户的需求进行定制,提高了程序的可扩展性和易用性。 ...

    C++常用库,boost 1.78版本

    8. Boost.Program_options:处理命令行参数解析,帮助开发者轻松地从命令行中获取配置选项。 9. Boost.Test:一个强大的单元测试框架,用于编写和运行C++代码的测试用例,确保代码质量。 10. Boost.Random:生成...

    boost1.55_x64.zip

    6. **Boost.Program_options**: 解析命令行选项和配置文件,使得程序更加灵活可配置。 7. **Boost.Python**: 使C++代码能与Python无缝交互,方便构建混合语言项目。 8. **Boost.Regex**: 提供正则表达式操作的库,...

Global site tag (gtag.js) - Google Analytics