9 Stimmen

Funktionszusammensetzung in C++

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 von boost::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.

0voto

cibercitizen1 Punkte 19984

Siehe diese Antwort https://stackoverflow.com/a/27727236/286335. Wirklich kurz, einfach und allgemein.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X