簡體   English   中英

如何以編程方式生成相同值的 std::index_sequence 而無需對每個元素進行遞歸模板實例化

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM