我正在阅读关于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