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
它使用“经典”元编程,也许也可以使用更现代的构造来实现。
假设我有一个元组类型,例如
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 它使用“经典”元编程,也许也可以使用更现代的构造来实现。