Da C ++ - Metaprogrammierung funktional ist: Gibt es irgendeinen Weg, etwas zu tun, das mit irgendwelchen funktionellen Programmiersprachen (z. B. Haskell's) oder wo konstruiert ist?
Ich verwende Boost :: MPL, möchte aber mehr Struktur für längere Metafunktionen haben. Die Aufteilung in mehrere Funktionen ist in Ordnung, aber ich würde in einigen Fällen lassen / lassen.
Die MPL selbst unterstützt let
-Klauseln nicht, aber einige der darauf aufbauenden Bibliotheken tun dies. Ein Beispiel ist metamonad . Wie der Name schon sagt, unterstützt es auch einige andere funktionale Konzepte (Monaden). Ein großer Nachteil ist, dass metamonad
kein offizieller Teil der Boost-Distribution ist.
Was die Problemumgehung für die MPL betrifft, so ist es wahrscheinlich die beste Wahl, Dinge in Funktionen aufzuteilen und mehr Namespaces zu verwenden, um sie zu gruppieren und dann das wichtige Symbol in den Namespace der obersten Ebene zu importieren.
Boost.Phoenix hat ein Konstrukt namens let Damit können Sie lokale Variablen in einem Funktionskontext höherer Ordnung deklarieren. Ich denke, das ist so hoch wie es geht. Es ist immer noch Laufzeit, keine Kompilierzeit.
Von der verknüpften Seite:
%Vor%Tags und Links haskell c++ boost metaprogramming boost-mpl