C++11 函数装饰器
在pyhon里经常看到如下的代码
def Decorator(func):
def _func(*args, **kwargs):
print("before function")
result = func(*args, **kwargs)
print("after function")
return result
return _func
@Decorator
def func_a(a, b):
print(a + b)
if __name__ == '__main__':
func_a(1, 4)
运行上述代码,可以看到如下的结果
before function
5
after function
利用装饰器,我们可以实现函数计时、授权检查、日志等等复杂的功能。
那么如何在C++里实现一个类似的功能呢?
我们可以利用函数指针的功能,将函数暂存在装饰器类中,然后再调用前与调用后执行相应的功能。
话不多说直接上代码
/*!
* @brief 装饰器基类
* @tparam FUN_RET_TYPE 函数返回值类型
* @tparam FUN_ARGS 函数参数类型
*/
template<typename FUN_RET_TYPE, typename ... FUN_ARGS>
class Decorator {
protected:
//被装饰的函数
std::function<FUN_RET_TYPE(FUN_ARGS...)> decorated_func;
public:
explicit Decorator(const std