我有一个这样的课程:
#include <tuple>
// Models is supposed to be a tuple<class... Classes>
template<class Models>
class MyClass
{
std::tuple<
std::tuple_element<0,Models>::type::NestedType,
std::tuple_element<1,Models>::type::NestedType,
std::tuple_element<2,Models>::type::NestedType
> nestedTypedTuple;
};
目前nestedTypedTuple
的固定大小为3个元素,对于较大尺寸的Models
来说太小,而对于较小尺寸的Models
则根本不起作用。我想以更通用的方式定义它,以便它的声明适用于Models
中的任意数量的元素。似乎使用给定here迭代元组的方法不起作用,因为我需要派生一个类型,而不是在这里调用函数。
什么是工作方法?
答案 0 :(得分:2)
template <class Models> class MyClass; // leave undefined
template <class... Ts>
class MyClass<std::tuple<Ts...>>
{
std::tuple<typename Ts::NestedType...> nestedTypedTuple;
};
template <class Models>
class MyClass
{
template <std::size_t... Is>
static std::tuple<typename std::tuple_element<Is, Models>::type::NestedType...> helper(std::index_sequence<Is...>);
using NestedTypedTuple = decltype(helper(std::make_index_sequence<std::tuple_size<Models>::value>{}));
NestedTypedTuple nestedTypedTuple;
};