فهرست منبع

AK: Add explicit Variant conversion operators

This allows converting between Variants of different types with less
pain.
Ali Mohammad Pur 4 سال پیش
والد
کامیت
bda19a9ff3
1فایلهای تغییر یافته به همراه13 افزوده شده و 1 حذف شده
  1. 13 1
      AK/Variant.h

+ 13 - 1
AK/Variant.h

@@ -331,7 +331,7 @@ public:
     }
 
     template<typename... NewTs>
-    Variant<NewTs...> downcast() &
+    Variant<NewTs...> downcast() const&
     {
         Variant<NewTs...> instance { Variant<NewTs...>::invalid_index, Detail::VariantConstructTag {} };
         visit([&](const auto& value) {
@@ -342,6 +342,18 @@ public:
         return instance;
     }
 
+    template<typename... NewTs>
+    explicit operator Variant<NewTs...>() &&
+    {
+        return downcast<NewTs...>();
+    }
+
+    template<typename... NewTs>
+    explicit operator Variant<NewTs...>() const&
+    {
+        return downcast<NewTs...>();
+    }
+
 private:
     static constexpr auto data_size = integer_sequence_generate_array<size_t>(0, IntegerSequence<size_t, sizeof(Ts)...>()).max();
     static constexpr auto data_alignment = integer_sequence_generate_array<size_t>(0, IntegerSequence<size_t, alignof(Ts)...>()).max();