Quantcast
Channel: User HolyBlackCat - Stack Overflow
Viewing all articles
Browse latest Browse all 1287

Answer by HolyBlackCat for Deduce template parameters for std::variant template parameter

$
0
0

To get a parent std::variant from a class derived from it (if I understand you correctly, you want to accept derived classes too), do this:

template <typename ...P>std::variant<P...> &VariantIdentity(std::variant<P...> &);template <typename T>using ToBaseVariant = std::remove_reference_t<decltype((VariantIdentity)(std::declval<T &>()))>;

Then you can extract the arguments from the variant using partial specialization. E.g. of a base class of X, or as the other answer suggests, a completely separate class.

template <typename T>class XBase;template <typename ...P>class XBase<std::variant<P...>>{    std::tuple<P...> t;};template <typename T>class X : XBase<ToBaseVariant<T>>{    using XBase<ToBaseVariant<T>>::XBase;};

Viewing all articles
Browse latest Browse all 1287

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>