new library for arguments; refs #6
This commit is contained in:
89
doc/examples/arguments.cxx
Normal file
89
doc/examples/arguments.cxx
Normal file
@@ -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;
|
||||
}
|
Reference in New Issue
Block a user