Colderleo's blog Colderleo's blog
首页
Linux
C++
Python
前端
工具软件
mysql
索引
关于
GitHub (opens new window)

Colder Leo

热爱代码的打工人
首页
Linux
C++
Python
前端
工具软件
mysql
索引
关于
GitHub (opens new window)
  • bug定位的一些情形
  • c++性能调优,可能的情况
  • total-编程知识点集锦
  • hpc_common.hpp
  • memory order 内存模型
  • 类型推导之auto-template-decltype
  • 完美转发forward源码分析
  • 左值和右值,右值引用、重载 std-move,引用折叠
  • cmake用法
  • alignas、alignof、sizeof实现内存对齐分配
  • 通过宏定义控制debug打印
  • 程序耗时性能测试
  • 线程池开源项目阅读
  • C++类中包含没有默认构造函数的成员
  • C++可变参数模板
  • C++属性继承 public protected private
  • C++智能指针
  • C++导出so的方法,以及extern C 注意事项
  • 四种spin lock
  • condition_variable和unique_lock
  • dpdk、kernel bypass
  • 智能网卡solarflare、Mellanox、X10等
  • 汇编寄存器和常见指令
  • c++ 类的静态成员变量未定义
  • C++获取类成员函数地址
  • preload示例
  • C++异常安全和RAII
  • C++11单例模式
  • C++歪门邪道
  • boost-program-option用法
    • c++17通过模板获取类成员的个数
    • 通过模板实现结构体成员拷贝-按成员名匹配
    • STL学习路径
    • boost库安装使用方法
    • C++文件读写
    • linux下socket通信demo,server和client
    • makefile写法
    • RxCpp
    • C++
    gaoliu
    2023-04-30
    目录

    boost-program-option用法

    # program_options 使用示例

    #include <boost/program_options.hpp>
    #include <string>
    #include <stdint.h>
    #include <iostream>
    #include <stdio.h>
    
    using namespace std;
    namespace po = boost::program_options;
    
    int main(int argc, char **argv)
    {
        string ip;
        uint32_t port;
        string ext_flag;
    
        po::variables_map opts_varmap;
        po::options_description desc("program desc");
        desc.add_options()
            ("ip,i", po::value<string>(&ip), "first param is ip")
            ("port,p", po::value<uint32_t>(&port), "second param is port")
            ("ext_flag,e", po::value<string>(&ext_flag)->default_value(""), "ext flag")
            ("help,h", "help")
            ;
        
        // position param
        po::positional_options_description pos_desc;
        pos_desc.add("ip", 1);
        pos_desc.add("port", 1);
    
        try {
            po::store(po::command_line_parser(argc, argv).options(desc).positional(pos_desc).run(), opts_varmap);
            po::notify(opts_varmap);
        } catch(std::exception &e) {
            cout << e.what() << std::endl;
            return -1;
        }
    
        if(opts_varmap.count("help")) {
            cout << desc << endl;
            return 0;
        }
        printf("input param: ip=%s, port=%u, ext_flag=%s\n", ip.c_str(), port, ext_flag.c_str());
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43

    使用:

    $ ./program_options_demo  -i 127.0.0.1  -p 9999  -e flag1
    input param: ip=127.0.0.1, port=9999, ext_flag=flag1
    
    $ ./program_options_demo  127.0.0.1  9999  -e flag1
    input param: ip=127.0.0.1, port=9999, ext_flag=flag1
    
    $ ./program_options_demo  -e flag1  127.0.0.1  9999  
    input param: ip=127.0.0.1, port=9999, ext_flag=flag1
    
    $ ./program_options_demo  
    input param: ip=, port=0, ext_flag=
    
    $ ./program_options_demo -h
    program desc:
      -i [ --ip ] arg       first param is ip
      -p [ --port ] arg     second param is port
      -e [ --ext_flag ] arg ext flag
      -h [ --help ]         help
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    编辑 (opens new window)
    上次更新: 2023/05/07, 17:27:54
    C++歪门邪道
    c++17通过模板获取类成员的个数

    ← C++歪门邪道 c++17通过模板获取类成员的个数→

    最近更新
    01
    通过模板实现结构体成员拷贝-按成员名匹配
    05-07
    02
    c++17通过模板获取类成员的个数
    05-01
    03
    avx-sse切换惩罚
    04-30
    更多文章>
    Theme by Vdoing | Copyright © 2019-2023 Colder Leo | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式
    ×