1#ifndef NEFORCE_CORE_SYSTEM_CMDLINE_HPP__
2#define NEFORCE_CORE_SYSTEM_CMDLINE_HPP__
14NEFORCE_BEGIN_NAMESPACE__
26struct cmdline_exception final : system_exception {
27 explicit cmdline_exception(
const char* info =
"CmdLine Operation Failed.",
const char*
type = static_type,
28 const int code = 0) noexcept :
29 system_exception(info,
type,
code) {}
31 explicit cmdline_exception(
const exception& e) :
32 system_exception(e) {}
34 ~cmdline_exception()
override =
default;
35 static constexpr auto static_type =
"cmdline_exception";
189 option(
string lname,
char sname,
string desc,
bool req_val,
bool allow_multi,
string def_val);
193 string program_name_;
220 void parse_long_option(
const string& arg,
const vector<string>& args,
size_t& index);
229 void parse_short_options(
const string& arg,
const vector<string>& args,
size_t& index);
242 void add_option(
const string& long_name,
char short_name,
const string& description,
bool requires_value =
false,
243 bool allow_multiple =
false,
const string& default_value =
"");
273 NEFORCE_NODISCARD
string get(
const string& long_name,
size_t index = 0)
const;
280 NEFORCE_NODISCARD
bool has(
const string&
name)
const;
287 NEFORCE_NODISCARD
size_t count(
const string&
name)
const;
299 NEFORCE_NODISCARD
const string&
program_name() const noexcept {
return program_name_; }
318NEFORCE_END_NAMESPACE__
NEFORCE_NODISCARD bool has(const string &name) const
检查选项是否存在
NEFORCE_NODISCARD string get(const string &long_name, size_t index=0) const
获取选项值
void parse(int argc, char *argv[])
解析main函数参数
static NEFORCE_NODISCARD vector< string > get_os_argv()
获取操作系统提供的命令行参数
void print_help() const
打印帮助信息
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="")
添加选项定义
NEFORCE_NODISCARD const string & program_name() const noexcept
获取程序名称
NEFORCE_NODISCARD const vector< string > & positional_args() const noexcept
获取位置参数
void parse(const vector< string > &args)
解析字符串向量参数
void parse_os_args()
解析操作系统提供的命令行参数
NEFORCE_NODISCARD size_t count(const string &name) const
获取选项出现的次数
NEFORCE_ALWAYS_INLINE_INLINE bool name(char *buffer, size_t size)
获取当前线程名称
vector< string > values
解析得到的值列表
option(string lname, char sname, string desc, bool req_val, bool allow_multi, string def_val)
构造函数
bool allow_multiple
是否允许多次出现
exception(const char *info=static_type, const char *type=static_type, const int code=0)
构造函数
NEFORCE_NODISCARD int code() const noexcept
获取异常码
NEFORCE_NODISCARD const char * type() const noexcept
获取异常类型