Embedded-Entwicklung: C++-Metaprogrammierung mit Templates

Mit C++-Templates lassen sich Lookup-Tabellen komfortabel und ohne Overhead für das resultierende Binary zur Compile-Zeit erzeugen.

Artikel verschenken
In Pocket speichern vorlesen Druckansicht
Lesezeit: 10 Min.
Von
  • Dirk Petrautzki
Inhaltsverzeichnis

Seit jeher setzen Programme statische Tabellen immer dann ein, wenn sie zur Laufzeit anhand eines Eingangswerts einen Ausgangswert nachschlagen sollen. Diese meist als LUT (Look-up Tables) bezeichneten Tabellen sind vielfältig einsetzbar. Sie erlauben es insbesondere, komplexe Berechnungen zur Programmlaufzeit durch eine – in der Regel wesentlich schnellere – Wertsuche zu ersetzen. Gerade bei der Programmierung von Mikrocontrollern mit begrenzter Rechenleistung spielt die Zeitersparnis eine wichtige Rolle.

Statt diese Tabellen beispielsweise mit einem Tabellenkalkulationsprogramm zu berechnen und anschließend händisch in den Programmcode zu übertragen, kann man in C++ die Metaprogrammierung unter Zuhilfenahme von Templates nutzen und diese Tabellen zur Compile-Zeit generieren lassen. Ein nachträgliches Verändern einer Tabelle gestaltet sich insofern äußerst einfach, als dies durch ein simples Ändern der Berechnung oder das Anpassen von Konstanten geschieht.

Mehr zur Programmiersprache C++

Seit C++17 lassen sich solche Tabellen kompakter und verständlicher als zuvor erstellen. Allerdings hinken viele Entwicklungsumgebungen für Mikrocontroller respektive ihre Compiler und ihre Standardbibliothek hinterher und bieten noch keine Möglichkeit, C++17-konformen Code zu schreiben. Deshalb zeigt dieser Artikel, wie das Erstellen der LUT mit den Mitteln der Standards von C++17 bis herunter zu C++98 gelingt.