@@ -48,8 +48,14 @@ class ArgumentParser {
4848 parse (argc, argv);
4949 }
5050
51+ void add_argument (const std::string &name, const std::string &long_name,
52+ const std::string &desc, const bool required = false ) {
53+ _arguments.push_back ({name, desc, required});
54+ _pairs[name] = long_name;
55+ }
56+
5157 void add_argument (const std::string &name, const std::string &desc,
52- bool required = false ) {
58+ const bool required = false ) {
5359 _arguments.push_back ({name, desc, required});
5460 }
5561
@@ -59,9 +65,11 @@ class ArgumentParser {
5965 std::cout << " Usage: " << f << " [options]" << std::endl;
6066 std::cout << " Options:" << std::endl;
6167 for (auto &a : _arguments) {
62- std::cout << " " << std::setw (23 ) << std::left << a._name
63- << std::setw (23 ) << a._desc + (a._required ? " (Required)" : " " )
64- << std::endl;
68+ std::string name = a._name ;
69+ auto i = _pairs.find (name);
70+ if (i != _pairs.end ()) name.append (" , " + i->second );
71+ std::cout << " " << std::setw (23 ) << std::left << name << std::setw (23 )
72+ << a._desc + (a._required ? " (Required)" : " " ) << std::endl;
6573 }
6674 }
6775
@@ -101,7 +109,9 @@ class ArgumentParser {
101109 }
102110
103111 bool exists (const std::string &name) {
104- return _variables.find (_delimit (name)) != _variables.end ();
112+ std::string t = _delimit (name);
113+ if (_pairs.find (t) != _pairs.end ()) t = _pairs[t];
114+ return _variables.find (t) != _variables.end ();
105115 }
106116
107117 template <typename T>
@@ -134,14 +144,15 @@ class ArgumentParser {
134144 std::string _desc;
135145 bool _required;
136146 };
137- inline bool _add_variable (std::string name,
147+ inline void _add_variable (std::string name,
138148 std::vector<std::string> &arg_parts, char *argv[]) {
139149 if (name == " h" || name == " -help" ) {
140150 _help = true ;
141151 print_help (argv[0 ]);
142152 }
143153 _ltrim (name, [](int c) { return c != (int )' -' ; });
144154 name = _delimit (name);
155+ if (_pairs.find (name) != _pairs.end ()) name = _pairs[name];
145156 std::string val;
146157 if (arg_parts.size () > 1 ) {
147158 val = std::accumulate (arg_parts.begin () + 1 , arg_parts.end (),
@@ -207,14 +218,17 @@ class ArgumentParser {
207218 return s;
208219 }
209220
210- bool _help;
211221 std::string _desc;
222+ bool _help;
212223 std::vector<Argument> _arguments;
213224 std::unordered_map<std::string, std::string> _variables;
225+ std::unordered_map<std::string, std::string> _pairs;
214226};
215227template <>
216228inline std::string ArgumentParser::get<std::string>(const std::string &name) {
217- auto v = _variables.find (_delimit (name));
229+ std::string t = _delimit (name);
230+ if (_pairs.find (t) != _pairs.end ()) t = _pairs[t];
231+ auto v = _variables.find (t);
218232 if (v != _variables.end ()) return v->second ;
219233 return " " ;
220234}
0 commit comments