Es gibt viele beeindruckende Boost-Bibliotheken wie Boost.Lambda oder Boost.Phoenix, die dazu beitragen, C++ zu einer wirklich funktionalen Sprache zu machen. Aber gibt es einen einfachen Weg, eine zusammengesetzte Funktion aus beliebigen 2 oder mehr beliebigen Funktionen oder Funktoren zu erstellen?
Wenn ich habe: int f(int x)
und int g(int x)
, möchte ich etwas wie f . g
machen, was statisch ein neues Funktionsobjekt generieren würde, das äquivalent zu f(g(x))
ist.
Dies scheint durch verschiedene Techniken möglich zu sein, wie sie hier diskutiert werden. Sicherlich können Sie Aufrufe an boost::lambda::bind
verketten, um einen zusammengesetzten Funktor zu erstellen. Aber gibt es in Boost etwas, das es Ihnen leicht ermöglicht, beliebige 2 oder mehr Funktionen oder Funktionen als kombinieren, um einen einzelnen zusammengesetzten Funktor zu erstellen, ähnlich wie Sie es in einer Sprache wie Haskell tun würden?
1 Stimmen
Sie können
boost::bind
anstelle vonboost::lambda::bind
für diese Aufgabe verwenden. Es sieht so aus:bind(g, bind(f, _1))
. Kennen Sie das?0 Stimmen
Ja, Sie können verschachtelte Aufrufe von
boost::bind
verwenden, um zusammengesetzte Funktoren zu erstellen. Ich habe mich jedoch gefragt, ob es einen besseren Weg gibt, um dies zu tun.