python 读写c函数中内存_c++ - 什么相当于C ++中的Python函数装饰器? - 堆栈内存溢出...

虽然C ++没有对装饰器的显式语言支持,但事实证明你可以使用C ++ 14泛型lambda非常好地“模拟”它们。 这是我的看法:

#include

template

auto decorator(T&& func)

{

// we create a closure below

auto new_function = [func = std::forward(func)](auto&&... args)

{

std::cout << "BEGIN decorating...\n";

auto result = func(std::forward(args)...);

std::cout << "END decorating\n";

return result;

};

return new_function;

}

int f(int x)

{

std::cout << x * x << '\n';

return x * x;

}

auto decorated = decorator(f);

auto double_decorated = decorator(decorator(f));

int main()

{

decorated(5);

double_decorated(10);

}

当然在装饰器里面你可以添加你想要的任何东西(包括时间等),上面只是一个最小的例子。 如果它看起来太令人生畏,你可以忽略mumbo-jumbo std::forward和C ++ 14广义lambda捕获并简单地拥有

#include

template

auto decorator(T func)

{

// we create a closure below

auto new_function = [func](auto... args)

{

std::cout << "BEGIN decorating...\n";

auto result = func(args...);

std::cout << "END decorating\n";

return result;

};

return new_function;

}

int f(int x)

{

std::cout << x * x << '\n';

return x * x;

}

auto decorated = decorator(f);

auto double_decorated = decorator(decorator(f));

int main()

{

decorated(5);

double_decorated(10);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值