Golang defer C++实现方法

Golang语言中包含有一个defer关键字,它可以将在改函数return之前进行执行,它会经常被用于关闭文件描述符、关闭数据库连接以及解锁资源。

Defer关键字的典型特点是先进行defer定义的函数,后面执行。 这样的结构特点有点类似C++函数内部变量的定义和析构过程。

因此可以如下改写,来通过C++来实现defer关键字的原理:

defer.h文件

#pragma once

typedef void(*funcCB)();

class DeferPri

{

public:

DeferPri(funcCB cb);

~DeferPri();

private:

funcCB m_cb;

};

#define DEFER_VAR_NAME(a,b) a##b    //通过字符串连接函数定义不同变量名

#define CONNECT_NME(a,b) DEFER_VAR_NAME(a,b)

#define defer(func) DeferPri CONNECT_NME(DeferPri, __LINE__) = DeferPri([](){func});

defer.cpp文件

#include "defer.h"

DeferPri::DeferPri(funcCB cb)

{

m_cb = cb;

}

DeferPri::~DeferPri()

{

if (m_cb)

{

m_cb();

}

}

Main.cpp文件

#include "defer.h"

#include <iostream>

#include<stdio.h>

int main()

{

defer(std::cout << "1 defer call!" << std::endl;);

std::cout << "2 this is normal cout!" << std::endl;

defer(std::cout << "3 defer call!" << std::endl;);

std::cout << "4 this is normal cout!!" << std::endl;

}

实现效果

2 this is normal cout!
4 this is normal cout!!
3 defer call!
1 defer call!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值