我正在閱讀關於SO的this問題。數組初始化編譯時間 - Constexpr序列
問題本身並不是那麼有趣,但我想知道它是否存在以及如何實現編譯時解決方案。
關於第一個序列:
[1, 2, 4, 5, 7, 8, 10, 11, 13, 14, ...]
通過歸納:
除了那些可以由3
序列劃分應該像所有的數字,我找到了該序列的數學公式:
f(0) = 0;
f(x > 0) = floor[(3x - 1)/2];
因此,我已經實現了一個C++ constexpr
功能,其生成該序列中的第i數:
#include <type_traits>
template <typename T = std::size_t>
constexpr T generate_ith_number(const std::size_t index) {
static_assert(std::is_integral<T>::value, "T must to be an integral type");
if (index == 0) return 0;
return (3 * index - 1)/2;
}
現在,我想以產生「編譯時陣列/序列」,其存儲序列的前N個數字。
的結構應該是這樣的:
template <typename T, T... values>
struct sequence {};
template <typename T, std::size_t SIZE>
struct generate_sequence {}; // TODO: implement
問題(不止一個,但有關它們之間):
1)如何實現那種integer_sequence
?
2)編譯時是否可以從integer_sequence
構建std::array
?
有了C++ 17構造函數的推導,'std :: array {Is ...};'可以簡化爲'std :: array {Is ... };'。 –
metal