相关疑难解决方法(0)

数组初始化编译时间 - Constexpr序列

我正在读这个问题.

问题本身并不那么有趣,但我想知道它是否存在以及如何实现编译时解决方案.

关于第一个序列:

所有数字除了可以除以3之外的数字.

序列应该是这样的:

[1, 2, 4, 5, 7, 8, 10, 11, 13, 14, ...]
Run Code Online (Sandbox Code Playgroud)

通过归纳,我找到了该序列的数学公式:

 f(0) = 0;
 f(x > 0) = floor[(3x - 1) / 2];
Run Code Online (Sandbox Code Playgroud)

所以我实现了一个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;
}
Run Code Online (Sandbox Code Playgroud)

现在我想生成一个"编译时数组/序列",它存储序列的前N个数字.

结构应该是这样的:

template <typename …
Run Code Online (Sandbox Code Playgroud)

c++ arrays compile-time constexpr c++11

8
推荐指数
1
解决办法
2316
查看次数

标签 统计

arrays ×1

c++ ×1

c++11 ×1

compile-time ×1

constexpr ×1