假设我有以下类定义:
templateclass foo { boost::tuples::tuple<...> bar; };
给定编译时常量N
,我想将类型扩展为bar
包含N
指定类型元素的元组.也就是说,类型foo<2>::bar
会boost::tuples::tuple
.我猜我可以使用Boost.MPL,但我还没有想出确切的序列.我想我能做到:
templatestruct type_repeater { typedef typename boost::mpl::fold< boost::mpl::range_c , boost::mpl::vector<>, boost::mpl::push_back<_1, T> >::type type; };
所以那么例如type_repeater
相当于boost::mpl::vector
.我只是不确定如何/如果我可以采取该类型列表并将其注入元组的参数列表,就像我想要的那样.这可能吗?
这似乎是使用C++ 11的一个很好的最小例子
#include <tuple> template <unsigned int N, typename T> struct type_repeater { typedef decltype(std::tuple_cat(std::tuple<T>(), typename type_repeater<N-1, T>::type())) type; }; template <typename T> struct type_repeater<0, T> { typedef decltype(std::tuple<>()) type; }; int main() { type_repeater<3, float>::type asdf; std::get<0>(asdf); std::get<1>(asdf); std::get<2>(asdf); }