C++:如何根据另一个元组内的类型指定一个元组内的类型?

C++: How to specify types inside a tuple based on types inside another tuple?

假设我有一个元组类型,例如

using Tuple1 = std::tuple<int, float, double>;

和一些模板化 class

template <typename T>
class DummyClass;

并且我想指定一个如下所示的元组类型

using Tuple2 = std::tuple<DummyClass<std::tuple_element<0, Tuple1>::type>,
                          DummyClass<std::tuple_element<1, Tuple1>::type>,
                          DummyClass<std::tuple_element<2, Tuple1>::type>>;

只是现在我想让上面的内容更通用,而不必手动展开 Tuple2 中的所有类型。这可以通过模板元编程/可变参数逻辑实现吗?

你是这个意思吗?

#include <tuple>
#include <type_traits>


using t1=std::tuple<int,char,float>;

template <typename T>
struct S;

template<typename...Args>
std::tuple<S<Args> ...> maket2(const std::tuple<Args...>&);

template <typename T>
using t2 = decltype(maket2(std::declval<T>()));

static_assert(std::is_same_v<
    t2<t1>, 
    std::tuple<S<int>, S<char>, S<float>>
>);

https://godbolt.org/z/K6KGKzo18 它使用“经典”元编程,也许也可以使用更现代的构造来实现。