C++Guns – RoboBlog

21.01.2016

template loop mit rekursion

Filed under: Allgemein — Thomas @ 09:01

Einfache Schleifen mit Templates funktionieren mittels Rekursionen. Das ist auf
dem ersten Blick etwas ungewöhnlich, aber letzendlich doch nur eine Schleife.
Wir muessen die Anzahl an Iterationen aber zur Compilezeit vorgeben! Entweder
per Template Parameter oder constexpr.

Normal würde man Parameterlisten packen/unpacken oder was man sonst in einer Schleife macht.
Ich möchte aber N mal eine Funktion mit einem laufenden Template Parameter i erstellen.
Erstens kann ich so meine Funktion für ein festes N specialisieren, zweitens kann man
die spezielle Funktion zur Laufzeit auswählen.


#include <iostream>
#include <array>

template<int N>
void funcToImpl(int n) {
  std::cout << "template N: " << N << " runtime n: " << n < fixedLengthArray;
}

template<int i>
void func(int n) {
  if(i == n) {
    funcToImpl(n);
  } else {
    func<i-1>(n);
  }
}

// rekursionsanker bei i=0
template<>
void func<0>(int n) {
  funcToImpl<0>(n);
}

int main(int argc) {
  // rekursion faengt bei i=80 an
  func<80>(argc);
}

No Comments

No comments yet.

RSS feed for comments on this post.

Sorry, the comment form is closed at this time.

Powered by WordPress