Функция
transform_v2t
в приведенном ниже коде создает набор экземпляров шаблона класса A:
template <typename T>
struct A
{
T val;
};
template <class V, template <class> class T, std::size_t... index>
inline constexpr auto transform_v2t(std::index_sequence<index...>)
{
return std::make_tuple(T<std::variant_alternative_t<index, V>>() ...);
}
template <class V, template <class> class T>
inline constexpr auto transform_v2t()
{
return transform_v2t<V, T>(std::make_index_sequence<std::variant_size_v<V>>());
}
typedef std::variant<bool, char, int, float, double, std::string> V;
int main()
{
auto t1 = transform_v2t<V, A>();
}
возможно ли применить одну и ту же функцию transform_v2t
к классу с двумя аргументами шаблона, например:
template <typename P, typename T>
struct B
{
P other_val;
T val;
};
со специализацией P как int
?
с псевдокодом это может быть что-то вроде этого:
template <class T> typedef B<int, T> PartiallySpecializedB;
auto t2 = transform_v2t<V, PartiallySpecializedB>();
см. образец кода онлайн .