使用Boost program_options控制程序输入
简介
很多人使用界面来输入数据,本文的程序介绍如何使用Boost的program_options控制输入。
程序中使用了:
1. 短选项
2. 可以指定多个参数的选项
程序
#include <iostream>
#include <vector>
#include <string>
using namespace std;
// boost header files
#include <boost/program_options.hpp>
namespace boostpo = boost::program_options;
class Options
{
public:
Options(int &argc, char** &argv){
boostpo::options_description opts = boostpo::options_description("Allowed options");
opts.add_options()
("help,h" , "produce help message")
("int_opt,i" , boostpo::value<int>()->default_value(0) , "int option")
("string_opt,s" , boostpo::value<std::string>() , "string option")
("float_opt,f" , boostpo::value<float>() , "float option")
("multi_doubles,m", boostpo::value<vector<double> >()->multitoken(), "multiple doubles")
;
boostpo::variables_map vm;
try{
boostpo::store(boostpo::parse_command_line(argc, argv, opts), vm);
}
catch (boost::exception &e){
cerr << "wrong options" << endl;
cout << opts << endl;
exit(EXIT_FAILURE);
}
int_opt = vm["int_opt"].as<int>();
if (vm.count("string_opt")){
string_opt = vm["string_opt"].as<string>();
}
else{
cout << opts << endl;
cerr << "input string option please." << endl;
exit(EXIT_FAILURE);
}
if (vm.count("float_opt")){
float_opt = vm["float_opt"].as<float>();
}
else{
cout << opts << endl;
cerr << "input float option please." << endl;
exit(EXIT_FAILURE);
}
if (vm.count("multi_doubles")){
doubles_opt = vm["multi_doubles"].as<vector<double> >();
}
else{
cout << opts << endl;
cerr << "input multi_doubles option please." << endl;
exit(EXIT_FAILURE);
}
}
public:
int int_opt;
float float_opt;
std::string string_opt;
vector<double> doubles_opt;
};
int main(int argc, char **argv){
Options ops(argc, argv);
cout << "int option : " << ops.int_opt << endl;
cout << "string option : " << ops.string_opt << endl;
cout << "float option : " << ops.float_opt << endl;
cout << "multiple doubles : ";
for (size_t t = 0; t < ops.doubles_opt.size(); t++){
cout << ops.doubles_opt[t] << " ";
}
return EXIT_SUCCESS;
}
实验
> demo.exe -i 12 -s hello -f 11 -m 12.4 23.4
int option : 12
string option : hello
float option : 11
multiple doubles : 12.4 23.4
使用Boost program_options控制程序输入的更多相关文章
- boost::program_options 解析命令行参数
源码: #include <boost/program_options.hpp> namespace po = boost::program_options; int main(int a ...
- Boost命令行解释器的简单使用:Boost.Program_options
简介 如果使用比较多的命令行程序的话,对于命令行参数的输入肯定不会陌生,大部分的程序都是通过类似下面的形式进行输入的,比如熟悉的ls ls --all -l --color=auto 这里面包含了三种 ...
- boost:program_options
由于系统库getopt和getopt_long用起来不够直观,仔细看了下boost发现Boost.Program_options可以满足我的需求,它和getopt系列函数一样,可以抓起命令行参数,这里 ...
- boost之program_options库,解析命令行参数、读取配置文件
一.命令行解析 tprogram_options解析命令行参数示例代码: #include <iostream> using namespace std; #include <boo ...
- boost库中的 program_options
1.阅读rviz中的源码时在rviz/visualizer_app.cpp中遇到如下代码: po::options_description options; options.add_options() ...
- [C++Boost]程序参数项解析库Program_options使用指南
介绍 程序参数项(program options)是一系列name=value对,program_options 允许程序开发者获得通过命令行(command line)和配置文件(config fi ...
- 使用Boost.PropertyTree处理XML、JSON和INI数据
Boost.PropertyTree 应该是 Boost 1.41.0 开始正式加入 Boost 版本的.目前 ( 2010/02/28 ) 能下到的最新版本是 1.42.0. 主要作用/应用场合 B ...
- C++ 之Boost 实用工具类及简单使用
本文将介绍几个 Boost 实用工具类,包括 tuple.static_assert.pool.random 和 program_options等等.需要对标准 STL 具备一定的了解才能充分理解本文 ...
- boost开发指南
C++确实很复杂,神一样的0x不知道能否使C++变得纯粹和干爽? boost很复杂,感觉某些地方有过度设计和太过于就事论事的嫌疑,对实际开发工作的考虑太过于理想化.学习boost本身就是一个复杂度,有 ...
随机推荐
- POJ-2632 Crashing Robots模拟
题目链接: https://vjudge.net/problem/POJ-2632 题目大意: 在一个a×b的仓库里有n个机器人,编号为1到n.现在给出每一个机器人的坐标和它所面朝的方向,以及m条指令 ...
- hdu1052 Tian Ji -- The Horse Racing---田忌赛马贪心
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1052 题目大意: 田忌和齐王各有N匹马,判断怎样比赛,使田忌净胜场数最多. 思路: 一开始贪心出错, ...
- IndentationError : expected an indented block
IndentationError:在python的条件语句出现 expected an indented block问题 是指缩进问题,比如for循环里面的print前面需要四个空格. Python语 ...
- YARN中FIFO、Capacity以及Fari调度器的详细介绍
(1)FIFO Scheduler 将所有的Applications放到队列中,先按照作业的优先级高低.再按照到达时间的先后,为每个app分配资源.如果第一个app需要的资源被满足了,如果还剩下了资源 ...
- 【转】C++ STL快速入门
转自:https://www.cnblogs.com/skyfsm/p/6934246.html 冠军的试炼 悟已往之不谏,知来者之可追 博客园 首页 新随笔 联系 订阅 管理 随笔 - 60 文章 ...
- [Codeforces 933B]A Determined Cleanup
Description 题库链接 给你两个正整数 \(p,k\) ,询问是否能够构造多项式 \(f(x)=\sum\limits_{i=0}^{d-1}a_ix^i\) ,使得存在多项式 \(q(x) ...
- [SCOI2005]最大子矩阵
题目描述 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大.注意:选出的k个子矩阵不能相互重叠. 输入输出格式 输入格式: 第一行为n,m,k(1≤n≤100,1≤m≤2 ...
- ●BZOJ 1069 [SCOI2007]最大土地面积
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=1069 题解: 计算几何,凸包,旋转卡壳 其实和这个题差不多,POJ 2079 Triangl ...
- 习题 7-3 uva211
题意:给你28个多米勒牌,要求刚好铺满一个7x8的图,输出所有答 案.每个牌只能使用一次 思路: 对每个位置分别搜索其右边 和 下边. 但是在中途,细节上有点问题.最开始想的是搜到最后一个点输出答案, ...
- hdu 5573Binary Tree
Binary Tree Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Tota ...