#include <boost/program_options/options_description.hpp>
#include <boost/program_options/parsers.hpp>
using namespace boost::program_options;
#include <iostream>
using namespace std;
pair<string, string> reg_foo(const string& s)
{
if (s.find("-f") == 0) {
if (s.substr(2, 3) == "no-")
return make_pair(s.substr(5), string("false"));
else
return make_pair(s.substr(2), string("true"));
} else {
return make_pair(string(), string());
}
}
int main(int ac, const char **av)
{
try {
options_description desc("Allowed options");
desc.add_options()
("help", "", "produce a help message")
("foo", "true/false?", "just an option")
.default_parameter("true")
;
options_and_arguments oa = parse_command_line(ac, av, desc, 0, reg_foo);
if (oa.count("help")) {
cout << desc;
cout << "\nIn addition -ffoo and -fno-foo syntax are recognized.\n";
}
if (oa.count("foo")) {
cout << "foo parameter with the value of " << oa["foo"] << "\n";
}
}
catch(exception& e) {
cout << e.what() << "\n";
}
}