Comments (6)
Yes, also because some compiler versions support only <experimental/string_view> and newer ones have <string_view>
The code below worked for me
BETTER_ENUMS_CONSTEXPR_ inline bool _names_match(const char *stringizedName,
std::experimental::string_view &referenceName,
std::size_t index = 0)
{
return
_ends_name(stringizedName[index]) ? index == referenceName.size() :
index == referenceName.size() ? false :
stringizedName[index] != referenceName[index] ? false :
_names_match(stringizedName, referenceName, index + 1);
}
BETTER_ENUMS_CONSTEXPR_ static _optional \
_from_string_nothrow(std::experimental::string_view s); \
\
BETTER_ENUMS_CONSTEXPR_ static _optional_index \
_from_string_loop(std::experimental::string_view &s, std::size_t index = 0);\
BETTER_ENUMS_CONSTEXPR_ inline Enum::_optional_index \
Enum::_from_string_loop(std::experimental::string_view &s, std::size_t index) \
{ \
return \
index == _size() ? _optional_index() : \
::better_enums::_names_match( \
BETTER_ENUMS_NS(Enum)::_raw_names()[index], s) ? \
_optional_index(index) : \
_from_string_loop(s, index + 1); \
} \
\
BETTER_ENUMS_CONSTEXPR_ inline Enum::_optional \
Enum::_from_string_nothrow(std::experimental::string_view s) \
{ \
return \
::better_enums::_map_index<Enum>( \
BETTER_ENUMS_NS(Enum)::_value_array, _from_string_loop(s)); \
}
from better-enums.
Hi :)
I've looked at it briefly, and it seems like a good thing to add. I haven't had time to properly do it, though.
from better-enums.
One minor annoyance is it will probably need conditional compilation, based on compiler version and an override macro to force the overloads to be enabled for when the version detection does the wrong thing.
from better-enums.
Thanks for that.
I won't have the time to integrate it in the immediate future (because of all that conditional compilation testing that would be needed).
If you'd like to give it a try, you're welcome to open a PR and test in the Better Enums CI setup. I think it might need to be updated to use some more recent compilers in its build rows.
I'm not sure what to do about std::experimental
. Is it right that that namespace is not forwards-compatible (I never knew whether it is or isn't, actually), or something in there is guaranteed to stay? If not, we would probably want to avoid it entirely, and support only compilers that have std::string_view
.
from better-enums.
I am also interested in this feature. I think support for std::string_view
is good enough. I might have a shot at this, is there anyone currently working on this feature request?
from better-enums.
Thanks. Not to my knowledge.
from better-enums.
Related Issues (20)
- Static functions for enum types HOT 1
- Use in a packed struct HOT 1
- MSVC /permissive- leads to "expression did not evaluate to a constant" HOT 3
- Compiling example code: 5-map.cc fail HOT 2
- enums stops being enums HOT 1
- What is the tool to run better-enums in REPL mode in README.md? HOT 2
- Compile-time name trimming and binary size
- How to reflect to enum with type and value strings? HOT 4
- Need to have standard Debian packaging capability
- Cannot use better_enum from class HOT 1
- Using Better Enums in std::unordered_map as key leads to 'message : see reference to class template instantiation'
- Timeframe for new release / tag
- Provide an update to make_macros.py script to use python3
- Set up GitHub Actions
- C++17 interop: std::optional HOT 2
- Way to opt out of string conversion? HOT 2
- cannot add better_enum values to unordered_set HOT 3
- Member '_value' was not initialized in this constructor HOT 1
- Better-enum in maps HOT 7
- Are there guarantees on size with better enums? HOT 10
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from better-enums.