NexusForce 1.0.0
A rigorously engineered full-stack C++ backend library.
载入中...
搜索中...
未找到
cmdline.hpp
浏览该文件的文档.
1#ifndef NEFORCE_CORE_SYSTEM_CMDLINE_HPP__
2#define NEFORCE_CORE_SYSTEM_CMDLINE_HPP__
3
10
15NEFORCE_BEGIN_NAMESPACE__
16
22
27struct cmdline_exception final : value_exception {
28 explicit cmdline_exception(const char* info = "CmdLine Operation Failed.") noexcept :
29 value_exception(info) {}
30
31 explicit cmdline_exception(const exception& e) :
32 value_exception(e) {}
33
34 ~cmdline_exception() override = default;
35
36 NEFORCE_NODISCARD const char* type() const noexcept override { return "cmdline_exception"; }
37};
38 // Exceptions
40
147
161class NEFORCE_API cmdline {
162public:
169 struct NEFORCE_API option {
170 string long_name;
171 char short_name = 0;
172 string description;
173 bool requires_value = false;
174 bool allow_multiple = false;
176
178
179 option() = default;
180
190 option(string lname, char sname, string desc, bool req_val, bool allow_multi, string def_val);
191 };
192
197 enum class conflict_behavior {
198 error,
199 warning,
200 ignore
201 };
202
210 string present;
211 string required;
212 };
213
221 string option_a;
222 string option_b;
223 };
224
231 using validator = function<string(const string& name, const string& value)>;
232
233private:
234 string program_name_;
235 vector<option> options_;
236 unordered_map<string, size_t> options_long_;
237 unordered_map<char, size_t> options_short_;
238 vector<string> positional_;
239
240 vector<option_dependency> dependencies_;
241 vector<option_conflict> conflicts_;
242 conflict_behavior conflict_behavior_{conflict_behavior::error};
243 vector<validator> validators_;
244
250 option* find_option_long(const string& name);
251
257 option* find_option_short(char name);
258
266 void parse_long_option(const string& arg, const vector<string>& args, size_t& index);
267
275 void parse_short_options(const string& arg, const vector<string>& args, size_t& index);
276
283 void validate_values();
284
291 void validate_constraints();
292
293public:
304 void add_option(const string& long_name, char short_name, const string& description, bool requires_value = false,
305 bool allow_multiple = false, const string& default_value = "");
306
312
319 void parse(int argc, const char* argv[]);
320
326 void parse(const vector<string>& args);
327
335 NEFORCE_NODISCARD string get(const string& long_name, size_t index = 0) const;
336
342 NEFORCE_NODISCARD bool has(const string& name) const;
343
349 NEFORCE_NODISCARD size_t count(const string& name) const;
350
355 NEFORCE_NODISCARD const vector<string>& positional_args() const noexcept { return positional_; }
356
361 NEFORCE_NODISCARD const string& program_name() const noexcept { return program_name_; }
362
368 void print_help() const;
369
375 NEFORCE_NODISCARD static vector<string> get_os_argv();
376
382 void add_dependency(const string& present, const string& required);
383
389 void add_conflict(const string& option_a, const string& option_b);
390
395 void set_conflict_behavior(conflict_behavior behavior) noexcept { conflict_behavior_ = behavior; }
396
412 void load_config(const string& config_path, const string& section = "");
413
422
430 void add_range_validator(string long_name, int64_t min_val, int64_t max_val);
431
438 void add_regex_validator(string long_name, const string& pattern);
439};
440 // CommandLine
442
443NEFORCE_END_NAMESPACE__
444#endif // NEFORCE_CORE_SYSTEM_CMDLINE_HPP__
命令行参数解析器
void add_validator(validator v)
添加选项验证器
void add_dependency(const string &present, const string &required)
添加选项依赖关系
void add_range_validator(string long_name, int64_t min_val, int64_t max_val)
添加选项值范围验证器(数值范围)
static vector< string > get_os_argv()
获取操作系统提供的命令行参数
void parse(int argc, const char *argv[])
解析main函数参数
const string & program_name() const noexcept
获取程序名称
void load_config(const string &config_path, const string &section="")
从配置文件加载选项值
conflict_behavior
约束冲突处理行为
void set_conflict_behavior(conflict_behavior behavior) noexcept
设置冲突处理行为
void parse_os_args()
解析操作系统提供的命令行参数
string get(const string &long_name, size_t index=0) const
获取选项值
void add_regex_validator(string long_name, const string &pattern)
添加选项值正则验证器
void add_conflict(const string &option_a, const string &option_b)
添加选项冲突关系
void add_option(const string &long_name, char short_name, const string &description, bool requires_value=false, bool allow_multiple=false, const string &default_value="")
添加选项定义
bool has(const string &name) const
检查选项是否存在
function< string(const string &name, const string &value)> validator
选项值验证器类型
void print_help() const
打印帮助信息
size_t count(const string &name) const
获取选项出现的次数
const vector< string > & positional_args() const noexcept
获取位置参数
void parse(const vector< string > &args)
解析字符串向量参数
函数包装器主模板声明
动态大小数组容器
通用函数包装器
long int64_t
64位有符号整数类型
basic_string< char > string
字符字符串
字符串类型别名和实用函数
bool allow_multiple
是否允许多次出现
string description
选项描述
option(string lname, char sname, string desc, bool req_val, bool allow_multi, string def_val)
构造函数
string default_value
默认值
char short_name
短选项字符
vector< string > values
解析得到的值列表
string long_name
长选项名称
bool requires_value
是否需要值
const char * type() const noexcept override
获取异常类型
无序映射容器
动态大小数组容器