这是我所知道的最短、最简洁的方法:
template < class ... Types > struct type_list {
template<template<class...>class Z>
using apply_to = Z<Types...>;
};
using value_t = value_types::apply_to<std::variant>;
你可以变得更漂亮。例如:
template<class T, template<class...>class Z>
struct transcribe_parameters;
template<class T, template<class...>class Z>
using transcribe_parameters_t = typename
transcribe_parameters<T,Z>::type;
template<template<class...>class Zin, class...Ts, template<class...>class Zout>
struct transcribe_parameters<Zin<Ts...>, Zout> {
using type=Zout<Ts...>;
};
这给了你:
using value_t = transcribe_parameters_t<value_types, std::variant>;
但是,将其作为内置功能type_list
似乎并非不合理。