6 #include "generic/any/any.h"
7 #include "generic/optional.h"
8 #include "utils/string.h"
20 ARG_COUNT_ONE_OR_MANY,
21 ARG_COUNT_ZERO_OR_ONE,
22 ARG_COUNT_ZERO_OR_MANY
27 typedef std::multimap<std::string, any> Args;
30 const std::string& name,
32 const std::string& help=
"",
33 const std::string& var_name=
"",
34 ArgCount count=ARG_COUNT_ONE
39 auto it = args_.find(name);
40 if(it != args_.end()) {
48 std::vector<T> arg_value_list(
const std::string& name) {
51 auto it = args_.lower_bound(name);
52 for(; it != args_.upper_bound(name); ++it) {
53 ret.push_back(any_cast<T>(it->second));
60 optional<T> arg_value(
const std::string& name, T def) {
61 auto it = args_.find(name);
62 if(it != args_.end()) {
69 const Args& parsed_args()
const {
73 void print_help()
const;
74 bool parse_args(
int argc,
char* argv[]);
84 std::map<std::string, DefinedArg> defined_args_;