派生另一个元组类型的嵌套类型的元组类型

时间:2014-10-14 12:15:32

标签: c++ types nested tuples

我有一个这样的课程:

#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迭代元组的方法不起作用,因为我需要派生一个类型,而不是在这里调用函数。

什么是工作方法?

1 个答案:

答案 0 :(得分:2)

选项#1

template <class Models> class MyClass; // leave undefined

template <class... Ts>
class MyClass<std::tuple<Ts...>>
{
    std::tuple<typename Ts::NestedType...> nestedTypedTuple;
};

选项#2

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;
};