将可变参数模板的参数分成不同的列表?

时间:2015-12-24 08:53:44

标签: c++ templates variadic

是否可以"分开"提供给类模板到不同列表的类型,以便我可以区别对待它们?我想做的事情如下。

Class<<A, B, C>, <1, 2, 3>> c; // initialization

template <<List1Args...>, <List2Args...>
class Class {
...
// do stuff on the first list of types
template<typename T>
void doStuffWithList1() { 
...
}
template<typename First, typename Second, typename ... Rest>
void doStuffWithList1() { 
...
doStuffWithList1<Second, Rest...>();
}

// do stuff on the second list of types
template<typename T>
void doStuffWithList2() { 
...
}
template<typename First, typename Second, typename ... Rest>
void doStuffWithList2() { 
...
doStuffWithList2<Second, Rest...>();
}
};

稍微说一下,有什么好的资源/书籍可以让我了解更多关于c ++ 11模板元编程的知识?

1 个答案:

答案 0 :(得分:0)

您可以使用std::tuplestd::integer_sequence对类型/值进行分组。

template <typename Tuple, typename Sequence> class Class;

template <typename ...Ts, std::size_t ...Is>
class Class<std::tuple<Ts...>, std::index_sequence<Is...>>
{
    //...
};

Live example