C++ 实现 Go defer

本文介绍如何使用C++模拟Go的`defer`特性,通过模板类`Defer`存储函数指针,并在析构时调用,提供`make_defer`简化构造。展示了如何在`main`函数中使用该机制来延迟执行一段代码。
摘要由CSDN通过智能技术生成

模仿 Go defer 的C++实现

简单实现

在类中存储函数指针,在析构函数中调用这个函数即可

// 不可靠基类 //继承这个类的类将无法拷贝
struct noncopy{
protected:
    noncopy() = default ; //保证空构造存在
    noncopy(const noncopy&) = delete ; //删除拷贝函数
    noncopy& operator=(const noncopy&) = delete ; //删除等于拷贝函数
};

//defer
template<class F>
struct Defer : noncopy{
    Defer(const F& defer_callback):__defer_callback(std::ref(defer_callback)){}
    ~Defer(){__defer_callback();}
    const F& deferCallback() const {return __defer_callback;}
    void setDeferCallback(const F& defer_callback){__defer_callback = defer_callback;}
private:
    F __defer_callback;
};

//简化构造 //为了方便
template<class F>
Defer<F> make_defer(const F& end_fun){return Defer<F>(end_fun);}

//宏 //模仿go的书写格式
#define defer(F) auto __rul_defer = make_defer(F);

int main(){
  defer([](){
    std::cout<<"hello"<<std::endl;
  })
  return 0;
}

其他实现

https://gitee.com/keybox/actor-library/blob/master/actor/commons/commons_utils.h

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值