[英]How to programmatically generate std::index_sequence of same values without having to do recursive template instantiation for every element
#include <utility>
template<std::size_t Value, std::size_t Count, typename T = std::index_sequence<>>
struct index_sequence_of_same_value;
template<std::size_t Value, std::size_t Count, std::size_t... Rest>
struct index_sequence_of_same_value<Value, Count, std::index_sequence<Rest...>>
{
using type = typename index_sequence_of_same_value<Value, Count - 1, std::index_sequence<Value, Rest...>>::type;
};
template<std::size_t Value, std::size_t... Rest>
struct index_sequence_of_same_value<Value, 0, std::index_sequence<Rest...>>
{
using type = std::index_sequence<Rest...>;
};
template<std::size_t Value, std::size_t Count, typename T = std::index_sequence<>>
using make_index_sequence_of_same_value= typename index_sequence_of_same_value<Value, Count, T>::type;
int main()
{
make_index_sequence_of_same_value<4, 6> t; // std::integer_sequence<std::size_t, 4, 4, 4, 4, 4, 4>
}
使用递归模板实例化这似乎很简单。 但是这个实现非常慢并且也有限制,因为它必须递归地为每个元素实例化模板实例。
是否有另一种方法可以在不为元素数量实例化模板的情况下做类似的事情?
可能是这样的:
template <std::size_t Value, std::size_t... Is>
std::index_sequence<(Is, Value)...> make_sequence_helper(
std::index_sequence<Is...>); // no definition
template<std::size_t Value, std::size_t Count>
using make_index_sequence_of_same_value =
decltype(make_sequence_helper<Value>(std::make_index_sequence<Count>()));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.