optional
C++11/14/17 std::optional with functional-style extensions and reference support (by TartanLlama)
variant
C++17 `std::variant` for C++11/14/17 (by mpark)
optional | variant | |
---|---|---|
5 | 5 | |
885 | 686 | |
0.9% | 2.3% | |
0.0 | 0.0 | |
10 months ago | over 2 years ago | |
C++ | C++ | |
Creative Commons Zero v1.0 Universal | gtkbook License |
The number of mentions indicates the total number of mentions that we've tracked plus the number of user suggested alternatives.
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
optional
Posts with mentions or reviews of optional.
We have used some of these posts to build our list of alternatives
and similar projects. The last one was on 2023-08-13.
- Functional Programming in Modern C++: The Imperatives Must Go – Victor Ciura [video]
-
Backward compatible implementations of newer standards constructs?
For optional I would recommend Sy's implementation - optional
-
What is your preferred solution repeated nullptr checks on smart pointers
One could think of a more fluent interface to deal with smart pointers, similar to what exists in tl optional https://github.com/TartanLlama/optional
-
Assignment for optional<T>
It looks like tl::optional<>.
- Monadic interface for std::optional
variant
Posts with mentions or reviews of variant.
We have used some of these posts to build our list of alternatives
and similar projects. The last one was on 2023-05-24.
-
Backward compatible implementations of newer standards constructs?
For Variant I would recommend Michael Park's variant - mpark::variant
-
Is there an exception that I could throw if there is a path that should never run.
have a look at https://github.com/mpark/variant
-
An std::variant alternative for C++11
I know that there is boost::variant but adding the whole boot dependency for this use case seem too much. I have seen the following implementation and similar ones
-
How to implicitly convert between pointers and integral types
You could build your own versions if thats a concern. Or use one of the free pre-C++17 implementations (like I do in my C++11 codebase). https://github.com/mpark/variant
-
Using std::variant and std::visit to transform-reduce a (rose) tree
mpark::variant and mpark::visit are faster than the gcc STL implementation.
What are some alternatives?
When comparing optional and variant you can also consider the following projects:
expected - C++11/14/17 std::expected with functional-style extensions
recursive-variant - Recursive Variant: A simple library for Recursive Variant Types
nonstd-lite - Parent of *-lite repositories, a migration path to post-C++11 features for pre-C++11 environments
BackportCpp - Library of backported modern C++ types to work with C++11
GSL - Guidelines Support Library
enum_name - Converting (scoped)enum values to string names written in C++>=11.