1#ifndef NEFORCE_CORE_SYSTEM_CMDLINE_HPP__
2#define NEFORCE_CORE_SYSTEM_CMDLINE_HPP__
15NEFORCE_BEGIN_NAMESPACE__
27struct cmdline_exception final : value_exception {
28 explicit cmdline_exception(
const char* info =
"CmdLine Operation Failed.") noexcept :
29 value_exception(info) {}
31 explicit cmdline_exception(
const exception& e) :
34 ~cmdline_exception()
override =
default;
36 NEFORCE_NODISCARD
const char*
type() const noexcept
override {
return "cmdline_exception"; }
169 struct NEFORCE_API option {
190 option(
string lname,
char sname,
string desc,
bool req_val,
bool allow_multi,
string def_val);
234 string program_name_;
250 option* find_option_long(
const string& name);
257 option* find_option_short(
char name);
266 void parse_long_option(
const string& arg,
const vector<string>& args,
size_t& index);
275 void parse_short_options(
const string& arg,
const vector<string>& args,
size_t& index);
283 void validate_values();
291 void validate_constraints();
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 =
"");
319 void parse(
int argc,
const char* argv[]);
335 NEFORCE_NODISCARD
string get(
const string& long_name,
size_t index = 0)
const;
342 NEFORCE_NODISCARD
bool has(
const string& name)
const;
349 NEFORCE_NODISCARD
size_t count(
const string& name)
const;
361 NEFORCE_NODISCARD
const string&
program_name() const noexcept {
return program_name_; }
412 void load_config(
const string& config_path,
const string& section =
"");
443NEFORCE_END_NAMESPACE__
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 §ion="")
从配置文件加载选项值
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)
解析字符串向量参数
basic_string< char > string
字符字符串
bool allow_multiple
是否允许多次出现
option(string lname, char sname, string desc, bool req_val, bool allow_multi, string def_val)
构造函数
vector< string > values
解析得到的值列表
const char * type() const noexcept override
获取异常类型