Ich möchte eine Template-Funktion foo
mit einer Sequenz verschiedener (nicht typisierter) Parameter aufrufen, wobei aufeinanderfolgende ganzzahlige Werte zwischen einer unteren und oberen Grenze genommen werden. Zum Beispiel:Aufruf der Template-Funktion mit mehreren Parameterwerten
template <int K> void foo(){ ... }
int const UPPER = 10, LOWER = 5;
for(int i = LOWER; i <= UPPER; i++)
foo<i>();
Das ist natürlich, wird nicht funktionieren, da i
wird bei der Kompilierung nicht bekannt. Ich bin auf der Suche nach einer Möglichkeit, diese Art von Programm zu erreichen, ohne so etwas zu schreiben:
foo<5>(); foo<6>(); foo<7>(); foo<8>(); foo<9>(); foo<10>();
Dies ist vor allem, weil ich auf der Veränderung UPPER
und LOWER
von einer Ausführung zum nächsten beabsichtigen.
Meine einzige Idee war, eine konstante Array der ganzen Zahlen zu erzeugen, die an die Template-Parameter wird gesendet:
int const arr[6] = {5, 6, 7, 8, 9, 10};
for(int i = LOWER; i <= UPPER; i++)
foo<arr[i]>();
Aber noch einmal, obwohl die Elemente des Arrays konstant sind, ist i
bei nicht bekannt Kompilierzeit so ist weder arr[i]
. Irgendwelche Vorschläge?
Vielen Dank im Voraus.
Es sieht aus wie Sie [ 'std verwenden möchten: : integer_sequence'] (http://en.cppreference.com/w/cpp/utility/integer_sequence) – NathanOliver
Sie könnten foo() in eine 'template struct foowrapper' schreiben, das macht es viel einfacher. Ist das erlaubt ? –
lorro