c++ - 我可以生成一个大小为 n 的常量数组吗

标签 c++ build-time

我想生成一个常量数组power[501] = {1, p % MODER, p*p % MODER, p*p*p % MODER, ..., p^500 % MODER},其中p为常数。

我知道我可以使用以下代码生成 p^n % MODER:

template<int a, int n> struct pow
{
  static const int value = a * pow<a, n-1>::value % MODER;
};
template<int a> struct pow<a, 0>
{
  static const int value = 1;
};

它确实有效!

我的问题是我是否可以生成我想要的数组?

最佳答案

您可以使用 BOOST_PP_ENUM作为:

#include <iostream>
#include <boost/preprocessor/repetition/enum.hpp>

#define MODER 10

template<int a, int n> struct pow
{
  static const int value = a * pow<a, n-1>::value % MODER;
};
template<int a> struct pow<a, 0>
{
  static const int value = 1;
};

#define ORDER(count, i, data) pow<data,i>::value

int main() {
  const int p = 3;
  int const a[] = { BOOST_PP_ENUM(10, ORDER, p) };
  std::size_t const n = sizeof(a)/sizeof(int);
  for(std::size_t i = 0 ; i != n ; ++i ) 
    std::cout << a[i] << "\n";
  return 0;
}

输出:

1
3
9
7
1
3
9
7
1
3

参见 online demo

行:

int const a[] = { BOOST_PP_ENUM(10, ORDER, p) };

扩展为:

int const a[] = { pow<p,0>::value, pow<p,1>::value, ...., pow<p,9>::value};

关于c++ - 我可以生成一个大小为 n 的常量数组吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11665509/

相关文章:

作为类方法的参数传递的函数的 c++ std::vector

c++ - 在存在不可预测的类型别名的情况下如何处理显式模板实例化?

c++ - 如何在没有备忘录的情况下使用内存来执行此递归代码?

c++ - 类型转换 boost::fusion::vector

c++ - 我如何找出编译器花费时间的地方?

android - 使用 Android Studio 3.1 的构建时间较长

c++ - 用于在编译前检测 C++ 代码中未捕获异常的静态代码分析工具?

reactjs - 打包时如何减少 React 应用程序构建时间和理解 webpack 的行为

c++ - 具有大型静态数组的 Visual C++ 2010 中的编译时间较长

java - 关闭部分代码以加快构建时间 (Gradle)