VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 1277|回复: 2

[交流] 字符串參數解析

[复制链接]
74_avatar_middle
最佳答案
0 
在线会员 发表于 2016-6-2 13:08:56 | 显示全部楼层 |阅读模式
Wireshark 的操作風格 孤十分欣賞 提供一個輸入框 輸入內容 作為參數 解析 執行不同操作
孤 近日 亦需要實現此功能 然 boost::program_options 似乎只提供了 解析 命令行參數 的功能 不能直接解析 字符串 於是 昨日 自己實現了個basic_options模板類完成此功能
options_t woptions_t 是basic_options 分別 對std::string std::wstring 的 特化

basic_options 使用了 boost::xpressive 處理字符串 以及其她 boost組件 編譯 需要自配置環境

  1. #include <dark-cpp/strings/options.hpp>

  2. void mywrite(std::basic_ostream<char>& ostream,dark::strings::options_t::options_params_ptr_t node)
  3. {
  4.         ostream<<node->full_name<<"\n";
  5. }
  6. int _tmain(int argc, _TCHAR* argv[])
  7. {
  8.         /******        options_t        ******/
  9.         puts("******        options_t        ******");
  10.         std::string params = "-h  -o="news" -t=test --close="opend" -v=1.0 -p=1102";
  11.        
  12.         //創建 分析器
  13.         dark::strings::options_t opts;
  14.         opts("help","h","show help info","")
  15.                 ("open","o","open new database","test.db")
  16.                 ("close","","close database","test.db")
  17.                 ("version","v","show version","")
  18.                 ("port","p","connect port","")
  19.                 ;
  20.         //輸出 幫助 信息
  21.         opts.write(std::cout);
  22.         //自定義 幫助信息 顯示格式
  23.         opts.write_style(std::cout,mywrite);

  24.         //分析參數
  25.         dark::strings::options_result_t rs;
  26.         opts.analyze(params,rs);

  27.         //所有傳入 參數
  28.         puts("/*****        params        *****/");
  29.         BOOST_FOREACH(auto param,rs._params)
  30.         {
  31.                 std::cout<<param.first<<"        "<<param.second<<"\n";
  32.         }
  33.         //驗證 指定參數
  34.         std::cout<<"has help        "<<rs.has_param("help")<<"\n";
  35.         std::cout<<"has test        "<<rs.has_param("test")<<"\n";
  36.         std::size_t port = 0;
  37.         if(rs.has_param<std::size_t>("port",port))
  38.         {
  39.                 std::cout<<"port="<<port<<"\n";
  40.         }
  41.         std::string version;
  42.         if(rs.has_param("version",version))
  43.         {
  44.                 std::cout<<"version="<<version<<"\n";
  45.         }

  46.         return 0;
  47. }
复制代码


更詳細的說明 見 https://github.com/zuiwuchang/dark-cpp/blob/master/document/strings/options.html

options.zip

2.07 KB, 下载次数: 0, 下载积分: 驿站币 -1

options.hpp

评分

参与人数 1威望 +2 驿站币 +3 热心值 +3 收起 理由
51_avatar_small Syc + 2 + 3 + 3 支持原创!

查看全部评分





上一篇:IOCP完成端口---带注释-
下一篇:MFC学习资料共享
51_avatar_middle
最佳答案
2 
online_admins 发表于 2016-6-3 17:47:08 | 显示全部楼层
哈哈,看来楼主身份不小啊
孤孤孤。。。
不错的文章,学习了
74_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2016-6-3 19:44:13 | 显示全部楼层
Syc 发表于 2016-6-3 17:47
哈哈,看来楼主身份不小啊
孤孤孤。。。
不错的文章,学习了

只是編程久了 經常覺得有點孤單 所以才決定用 孤自稱的
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-10-21 04:21

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表