Python hat eine sehr nützliche Funktion von function decorators, die darüber hinaus Zusammensetzung ermöglicht. Schreiben Sie zum Beispiel, wenn eine Funktion foo
, dann können Sie feststellen, dass Sie foo
mögen memoized, sondern auch retried mehr als nur ein einziges Mal bei einer Cache-Miss in der foo
auch eine Ausnahme auslöst, durch:Composable C++ - Funktions-Dekoratoren
@lru_cache
@retry
def foo(...):
Mit der Dekorator-Zusammensetzbarkeit können Funktionen wie foo
und einzelne Funktionsdekoratoren unabhängig voneinander entwickelt und dann nach Bedarf gemischt werden. Es wäre schön, wenn wir das auch in C++ tun könnten (soweit möglich).
Zwar gibt es mehrere Fragen zu StackOverflow in Bezug auf Funktion Dekoratoren, aber alle scheinen nicht zusammensetzbare zu generieren, aufgrund der starren Annahmen über die Signatur der verzierten Funktion. Z. B. bedenken Sie die ausgezeichnete Antwort mit der besten Wahl an this question. Die Dekoration ist von der Form
template <typename R, typename... Args>
std::function<R (Args...)> memo(R (*fn)(Args...)) {
Folglich ist es cannot be applied to the result of itself (zugegebenermaßen nicht viel von einem Problem für die spezifische Dekorateur Verwendung von memoization).
Wie können wir komponierbare Funktionsdekoratoren dann schreiben?
Das Beispiel, das Sie geben, ist nicht sehr überzeugend; In dieser Implementierung ist nichts enthalten, was einen Funktionszeiger erfordert. –