article:
https://blogs.msdn.microsoft.com/vcblog/2018/09/04/stdoptional-how-when-and-why/
std::optional
std::any
std::variant
https://blogs.msdn.microsoft.com/vcblog/2018/09/04/stdoptional-how-when-and-why/
std::optional
std::any
std::variant
using T = /* some object type */; struct S { optional<T> maybe_T; void construct_the_T(int arg) { // We need not guard against repeat initialization; // optional's emplace member will destroy any // contained object and make a fresh one. maybe_T.emplace(arg); } T& get_the_T() { assert(maybe_T); return *maybe_T; // Or, if we prefer an exception when maybe_T is not initialized: // return maybe_T.value(); } // ... No error-prone handwritten special member functions! ... };
Reference:
https://vsdmars.blogspot.com/2018/05/caccu2018-tricks-library-implementation.html
https://vsdmars.blogspot.com/2018/06/c-regular-type.html
golang:
https://godoc.org/google.golang.org/cloud/internal/optional
src:
https://github.com/GoogleCloudPlatform/google-cloud-go/blob/master/internal/optional/optional.go
Java:
https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.