NexusForce 1.0.0
A rigorously engineered full-stack C++ backend library.
载入中...
搜索中...
未找到
enum.hpp
浏览该文件的文档.
1#ifndef NEFORCE_CORE_REFLECT_ENUM_HPP__
2#define NEFORCE_CORE_REFLECT_ENUM_HPP__
3
11
14NEFORCE_BEGIN_NAMESPACE__
15NEFORCE_BEGIN_REFLECT__
16
22
31
38class meta_enum {
39private:
40 string_view name_;
41 type_id underlying_type_id_;
42 vector<enum_entry> entries_;
43
44public:
51 name_(name),
52 underlying_type_id_(underlying_id) {}
53
59 void add_entry(string_view entry_name, const int64_t entry_value) { entries_.push_back({entry_name, entry_value}); }
60
64 NEFORCE_NODISCARD string_view name() const noexcept { return name_; }
65
69 NEFORCE_NODISCARD type_id underlying_type_id() const noexcept { return underlying_type_id_; }
70
74 NEFORCE_NODISCARD const vector<enum_entry>& entries() const noexcept { return entries_; }
75
82 NEFORCE_NODISCARD bool value_of(string_view entry_name, int64_t& out_value) const noexcept {
83 for (const auto& entry: entries_) {
84 if (entry.name == entry_name) {
85 out_value = entry.value;
86 return true;
87 }
88 }
89 return false;
90 }
91
97 NEFORCE_NODISCARD string_view name_of(const int64_t entry_value) const noexcept {
98 for (const auto& entry: entries_) {
99 if (entry.value == entry_value) {
100 return entry.name;
101 }
102 }
103 return {};
104 }
105};
106 // Reflection
108
109NEFORCE_END_REFLECT__
110NEFORCE_END_NAMESPACE__
111#endif // NEFORCE_CORE_REFLECT_ENUM_HPP__
void add_entry(string_view entry_name, const int64_t entry_value)
添加枚举条目
type_id underlying_type_id() const noexcept
获取底层类型 ID
string_view name_of(const int64_t entry_value) const noexcept
通过数值查找枚举名称
bool value_of(string_view entry_name, int64_t &out_value) const noexcept
通过名称查找枚举值
string_view name() const noexcept
获取枚举类型名称
const vector< enum_entry > & entries() const noexcept
获取所有枚举条目
meta_enum(string_view name, type_id underlying_id)
构造函数
动态大小数组容器
long int64_t
64位有符号整数类型
size_t type_id
类型标识符
basic_string_view< char > string_view
字符字符串视图
类型擦除容器
枚举条目
int64_t value
枚举数值
string_view name
枚举值名称
动态大小数组容器