external enum example

This commit is contained in:
2019-11-22 11:03:31 +07:00
parent c3e3b8bda2
commit 87af589725
2 changed files with 66 additions and 1 deletions

View File

@@ -148,6 +148,8 @@ namespace some_namespace
ENUM_HPP_REGISTER_TRAITS(color)
int main() {
using color = some_namespace::color;
// to string
static_assert(enum_hpp::to_string(color::red) == "red");
@@ -158,6 +160,34 @@ int main() {
}
```
### Adapting external enums
```cpp
namespace external_ns
{
enum class external_enum : unsigned short {
a = 10,
b,
c = a + b
};
// should be in the same namespace
ENUM_HPP_TRAITS_DECL(external_enum,
(a)
(b)
(c))
}
ENUM_HPP_REGISTER_TRAITS(external_ns::external_enum)
int main() {
using ee = external_ns::external_enum;
static_assert(enum_hpp::to_string(ee::a) == "a");
static_assert(enum_hpp::from_string<ee>("c") == ee::c);
return 0;
}
```
## API
### Enum traits
@@ -170,11 +200,16 @@ ENUM_HPP_DECL(
/*fields*/)
// declare enum class
ENUM_HPP_DECL(
ENUM_HPP_CLASS_DECL(
/*enum_name*/,
/*underlying_type*/,
/*fields*/)
// declare only traits
ENUM_HPP_TRAITS_DECL(
/*enum_name*/,
/*fields*/)
struct /*enum_name*/_traits {
using underlying_type = /*underlying_type*/;
static constexpr std::size_t size = /*field_count*/;