Python имеет очень полезную функцию function decorators, что, кроме того, позволяет композицию. Например, если написать функцию foo
, то вы можете указать, что вы хотели бы foo
быть memoized, но и retried более чем один раз в случае промаха кэша, в котором foo
также вызывает исключение, автор:Композитные декораторы функций C++
@lru_cache
@retry
def foo(...):
Декоративная композиция позволяет создавать функции, такие как foo
, и индивидуальные декораторы функций независимо, а затем смешивать их по мере необходимости. Было бы неплохо, если бы мы могли это сделать и на C++ (насколько это возможно).
Хотя в StackOverflow есть несколько вопросов относительно декораторов функций, все они, похоже, генерируют неконсолидируемые из-за жестких допущений на подпись декорированной функции. Например, рассмотрите отличный опрос, полученный сверху, до this question. Украшение формы
template <typename R, typename... Args>
std::function<R (Args...)> memo(R (*fn)(Args...)) {
Следовательно, cannot be applied to the result of itself (правда, не такая уж большая проблема для конкретного использования декоратора запоминанием).
Как мы можем написать декоративные декораторы функций?
Пример, который вы даете, не очень убедителен; в этой реализации нет ничего, что требует, чтобы он использовал указатель на функцию. –