NexusForce 1.0.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
cmdline.hpp
浏览该文件的文档.
1#ifndef NEFORCE_CORE_SYSTEM_CMDLINE_HPP__
2#define NEFORCE_CORE_SYSTEM_CMDLINE_HPP__
3
10
14NEFORCE_BEGIN_NAMESPACE__
15
21
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) {}
30
31 explicit cmdline_exception(const exception& e) :
32 system_exception(e) {}
33
34 ~cmdline_exception() override = default;
35 static constexpr auto static_type = "cmdline_exception";
36};
37 // Exceptions
39
146
160class NEFORCE_API cmdline {
161public:
168 struct option {
169 string long_name;
170 char short_name = 0;
171 string description;
172 bool requires_value = false;
173 bool allow_multiple = false;
175
177
178 option() = default;
179
189 option(string lname, char sname, string desc, bool req_val, bool allow_multi, string def_val);
190 };
191
192private:
193 string program_name_;
194 vector<option> options_;
195 unordered_map<string, option*> options_long_;
196 unordered_map<char, option*> options_short_;
197 vector<string> positional_;
198
204 option* find_option_long(const string& name);
205
211 option* find_option_short(char name);
212
220 void parse_long_option(const string& arg, const vector<string>& args, size_t& index);
221
229 void parse_short_options(const string& arg, const vector<string>& args, size_t& index);
230
231public:
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 = "");
244
250
257 void parse(int argc, char* argv[]);
258
264 void parse(const vector<string>& args);
265
273 NEFORCE_NODISCARD string get(const string& long_name, size_t index = 0) const;
274
280 NEFORCE_NODISCARD bool has(const string& name) const;
281
287 NEFORCE_NODISCARD size_t count(const string& name) const;
288
293 NEFORCE_NODISCARD const vector<string>& positional_args() const noexcept { return positional_; }
294
299 NEFORCE_NODISCARD const string& program_name() const noexcept { return program_name_; }
300
306 void print_help() const;
307
313 NEFORCE_NODISCARD static vector<string> get_os_argv();
314};
315 // CommandLine
317
318NEFORCE_END_NAMESPACE__
319#endif // NEFORCE_CORE_SYSTEM_CMDLINE_HPP__
命令行参数解析器
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)
构造函数
char short_name
短选项字符
bool requires_value
是否需要值
string description
选项描述
string long_name
长选项名称
string default_value
默认值
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
获取异常类型
无序映射容器
动态大小数组容器