new library for arguments; refs #6
parent
904740c518
commit
a6b48ec7c4
1 changed files with 89 additions and 0 deletions
@ -0,0 +1,89 @@ |
||||
/*! @file
|
||||
|
||||
@id $Id$ |
||||
*/ |
||||
// 1 2 3 4 5 6 7 8
|
||||
// 45678901234567890123456789012345678901234567890123456789012345678901234567890
|
||||
|
||||
#include <mrw/args> |
||||
|
||||
void test_func() { |
||||
std::cout<<"test parameter was given on command line"<<std::endl; |
||||
} |
||||
|
||||
int main(int argc, char** argv) try { |
||||
|
||||
// option variables
|
||||
bool flag(false); |
||||
int r(5); |
||||
std::string txt("Hello World"); |
||||
int x(0), y(0); |
||||
|
||||
// bind and evaluate options
|
||||
#ifdef ARGS__OLD_PRE11_COMPILER |
||||
args::list options; |
||||
std::vector<std::shared_ptr<args::abstract_parameter> > params; |
||||
params.push_back(args::help()); |
||||
params.push_back(args::exit()); |
||||
options.push_back(args::declaration("h", "help", "show this help", params)); |
||||
params.clear(); |
||||
params.push_back(args::param(r, "number")); |
||||
options.push_back(args::declaration("r", "repeat", "number of repetitions", |
||||
params)); |
||||
params.clear(); |
||||
params.push_back(args::param(flag)); |
||||
options.push_back(args::declaration("f", "flag", "check a flag", params)); |
||||
params.clear(); |
||||
params.push_back(args::param(txt, "text")); |
||||
options.push_back(args::declaration("t", "text", "pass a text", params)); |
||||
params.clear(); |
||||
params.push_back(args::param(x, "x")); |
||||
params.push_back(args::param(y, "y")); |
||||
options.push_back(args::declaration("c", "coord", "add some 2D coordinates", |
||||
params)); |
||||
params.clear(); |
||||
params.push_back(args::func(test_func)); |
||||
options.push_back(args::declaration("", "test", |
||||
"call test_func, no shortcut", params)); |
||||
args::init(argc, argv, "This is an example for argument processing.", |
||||
options); |
||||
#else |
||||
args::init(argc, argv, |
||||
"This is an example for argument processing. If the description " |
||||
"is very long, it is automatically splitted over several lines " |
||||
"and indented on each new line. Arguments may have several " |
||||
"parameters. Help is generated automatically from the argument " |
||||
"declaration. The argument declaration contains long and short " |
||||
"options and a list of parameters.", |
||||
{ |
||||
{"h", "help", "show this help", {args::help(), args::exit()}}, |
||||
{"r", "repeat", "number of repetitions", |
||||
{args::param(r, "number")}}, |
||||
{"f", "flag", |
||||
"check a flag; this is a boolean, so it is false by " |
||||
"default and true if the user specifies the flag on " |
||||
"the command line", {args::param(flag)}}, |
||||
{"t", "text", "pass a text", {args::param(txt, "text")}}, |
||||
{"c", "coord", |
||||
"add some 2D coordinates; this is an example on how " |
||||
"you can add more than one parameter", |
||||
{args::param(x, "x"), args::param(y, "y")}}, |
||||
{"", "test", "call test_func, no shortcut", |
||||
{args::func(test_func)}}, |
||||
}, |
||||
"Returns a status of 0 on success and 1 on any error."); |
||||
#endif |
||||
|
||||
// show the result
|
||||
std::cout<<std::endl |
||||
<<"commandline is parsed, these are the settings now:"<<std::endl |
||||
<<"r = "<<r<<std::endl |
||||
<<"flag = "<<(flag?"yes":"no")<<std::endl |
||||
<<"txt = "<<txt<<std::endl |
||||
<<"coordinates = "<<x<<", "<<y<<std::endl; |
||||
|
||||
return 0; |
||||
} catch (const std::exception& x) { |
||||
std::cerr<<"**** ERROR: "<<x.what()<<std::endl; |
||||
return 1; |
||||
} |
Loading…
Reference in new issue