将元组转换为变体

Dan*_*ila 4 c++ metaprogramming c++17

我有以下类型

using MyTuple=std::tuple<std::vector<char>,std::vector<double>,std::vector<int>>;
Run Code Online (Sandbox Code Playgroud)

如何编写将 MyTuple 转换为以下类型的元函数?

std::variant<std::monostate,char,double,int> 
Run Code Online (Sandbox Code Playgroud)

m.s*_*.s. 5

#include <vector>
#include <tuple>
#include <variant>

template <typename Tuple>
struct get_variant;

template <typename... Ts>
struct get_variant<std::tuple<Ts...>>
{
    using type = std::variant<std::monostate, typename Ts::value_type ...>;
};


using MyTuple = std::tuple<std::vector<char>,std::vector<double>,std::vector<int>>;
using MyVariant = typename get_variant<MyTuple>::type;

using Expected = std::variant<std::monostate,char,double,int>;
static_assert(std::is_same_v<Expected, MyVariant>);
Run Code Online (Sandbox Code Playgroud)

活生生的例子