C++ Tutorial Meta Template Programmierung

Letzte Änderung: 30.10.2017

Der folgende Code enthält zwei Beispiele zur Meta Template Programmierung.

  • Increment
  • Decrement

Mit Rekursion wird dabei eine Zahl erhöht/verringert. Es gibt jeweils zwei Templates pro Funktionalität.

  • Template 1 wird rekursiv aufgerufen, bis die Abbruchbedingung erreicht ist
  • Template 2 wird bei erreichen der Abbruchbedingung aufgerufen

Die Berechnungen erfolgen vollständig zur Compile-Zeit.

main.cpp
// Use Meta Template Programming
// Thomas Thielemann info@th-thielemann.de
//

#include <stdio.h>

//!
//! Increment the value by 1 until index reaches 0
//!
template <int index>
class increment {
    public:
        enum {
            count = increment<index - 1>::count,
            value = 1 + increment<index - 1>::value
        };
};

//!
//! Terminate the increment for 0
//!
template <>
class increment<0> {
    public:
        enum {
            count = 0,
            value = 0
        };
};


//!
//! Decrement the value by 1 until index reaches 0
//!
template <int index>
class decrement {
    public:
        enum {
            count = decrement<index - 1>::count,
            value = decrement<index - 1>::value
        };
};

//!
//! Terminate the decrement for 0
//!
template <>
class decrement<0> {
    public:
        enum {
            count = 0,
            value = 0
        };
};


//!
//! \return Result
//!
int main(int, char**)
{
    printf("increment value=%i\n", increment<10>().value);
    printf("decrement value=%i\n", decrement<10>().value);
    return 0;
}




© 2003-2017 th-thielemann.de