Supposons que j'ai une certaine constexpr fonction f:
constexpr int f(int x) { ... }
Et j'ai quelques const int N connu au moment de la compilation:
Soit
#define N ...;
ou
const int N = ...;
selon les besoins de votre réponse.
Je veux avoir un tableau int X:
int X[N] = { f(0), f(1), f(2), ..., f(N-1) }
tels que la fonction est évaluée au moment de la compilation, et les entrées de X sont calculés par le compilateur et les résultats sont placés dans la zone statique de mon application image exactement comme si j'avais utilisé les littéraux entiers dans mon X liste d'initialiseur.
Est-il une manière que je peux écrire ceci? (Par exemple avec des modèles ou des macros et ainsi de suite)
Le meilleur que j'ai: (Merci à 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;
}