Python装饰器是一类输入输出都具有相同签名函数的函数,其主要用于对函数进行包装。装饰器会将其输入函数的名称重新绑定到输入函数上。

Python中的装饰器

  • 定义
def decorator(func):def wrapper(*args, **kwargs):print('before\n')result = func(*args, **kwargs)print('after\n')return resultreturn wrapper
  • 使用
@decorator
def sum(a, b):return a + b

其形如:

def sum(a, b):return a + b
sum = decorator(sum)

C++中实现类似方法

  • 实现
#include <functional>
#include <iostream>template<class R, class... Args>
class decorator : public std::function<R(Args...)>
{
public:R operator()(Args... args) const{std::cout << "before" << std::endl;R result = std::function<R(Args...)>::operator()(std::forward<Args>(args)...);std::cout << "after" << std::endl;return result;}
};
  • 使用
int sum(int a, int b)
{return a + b;
}int main(int argc, char *argv[])
{int result = decorator<int, int, int>{&sum}(1, 2);std::cout << "result " << result << std::endl;std::function<int(int, int)> fun = decorator<int, int, int>{&sum};result = fun(2, 3);std::cout << "result " << result << std::endl;return 0;
}