假设我有一些 constexpr 函数 f:
constexpr int f(int x) { ... }
而且我在编译时知道一些 const int N :
任何一个
#define N ...;
或者
const int N = ...;
根据您的回答需要。
我想要一个 int 数组 X:
int X[N] = { f(0), f(1), f(2), ..., f(N-1) }
这样函数在编译时就被评估,X 中的条目由编译器计算,结果被放置在我的应用程序映像的静态区域中,就好像我在我的 X 初始化器列表中使用了整数文字一样。
有什么办法可以写这个吗?(例如使用模板或宏等)
最好的:(感谢 Flexo)
#include <iostream>
#include <array>
using namespace std;
constexpr int N = 10;
constexpr int f(int x) { return x*2; }
typedef array<int, N> A;
template<int... i> constexpr A fs() { return A{{ f(i)... }}; }
template<int...> struct S;
template<int... i> struct S<0,i...>
{ static constexpr A gs() { return fs<0,i...>(); } };
template<int i, int... j> struct S<i,j...>
{ static constexpr A gs() { return S<i-1,i,j...>::gs(); } };
constexpr auto X = S<N-1>::gs();
int main()
{
cout << X[3] << endl;
}