4
是否有辦法使constexpr
- 無符號整數的數組滿足由constexpr布爾函數pred(std::size_t)
給出的謂詞?根據某個謂詞在編譯時填充數組
我嘗試了很多,特別是indices trick,只是爲了發現我的數據太大,因此它超出了256的遞歸模板實例化限制。我將無法更改此限制,如果它有可能改變它。
由於要求在評論,這裏是我想達到什麼樣的一些僞代碼:
template<std::size_t... Is>
struct Sequence{};
template<std::size_t N, std::size_t... Is>
struct SequenceGenerator : SequenceGenerator<N-1, N-1, Is...>
{}; //obviously here it gets too deep into recursion, as mentioned
template<std::size_t... Is>
struct SequenceGenerator<0, Is...> : Sequence<Is...>
{};
template<std::size_t N>
struct MyData
{
std::size_t values[N];
static constexpr std::size_t size()
{ return N; }
};
template<typename Lambda, std::size_t... Is>
constexpr MyData<sizeof...(Is)> MyGen(Sequence<Is...>, Lambda func)
{
if(func(Is)...)
return {{ Is... }};
else
return /*some not-invalidating but current element discarding thing*/
}
template<std::size_t N, typename Lambda>
constexpr Generator<N> MyGen(Lambda func)
{
return MyGen(SequenceGenerator<N>(), func);
}
constexpr bool pred(std::size_t i) noexcept
{
//some condition making up a "range"
return i < 360ULL && i > 2ULL;
}
你能告訴我們一些你想達到的(僞)代碼嗎?也許有一個小數據集沒有超出限制,但在其他方面的工作,並告訴我們你的意思? –
@DanielFrey添加的代碼 – NaCl
那麼你的想法是用給定的謂詞「過濾」一個範圍?另外,如果你正在尋找一個高效的「序列生成器」,我寫了一個庫,提供[對數實例化深度](https://github.com/Arcoth/VTMPL/blob/master/index_list.hxx)。 – Columbo