退出作用域时自动调用指定代码
来源:互联网 发布:cnmd是什么意思网络 编辑:程序博客网 时间:2024/06/05 06:09
问题
在编程过程中,尝尝希望在退出某个作用域时(如函数返回)执行制定的代码。
如果退出作用域的地方有多处则需要在每个地方都添加相应的代码,这样不但麻烦也容易遗漏。
解决思路
由于C++中当在作用域中创建的对象在退出作用域时会自动调用对象的析构函数,所以可以利用这个特性实现“退出作用域时自动调用制定代码”。
本来希望能在标准库或boost库中直接找到相关的功能,但可惜没有找到,所以就自己动手。其中存在的不足还请各位大神指正。
解决方法
示例代码
#include <iostream>template<typename T>class CAutoCall{public: CAutoCall(T fun) { m_pFun = fun; }; ~CAutoCall() { m_pFun(); };private: T m_pFun;};class CFunObj{public: CFunObj() : m_nA(0), m_nB(0) {}; void operator() () { std::cout << m_nA + m_nB << std::endl; };public: int m_nA; int m_nB;};int main(){ CAutoCall<void(*)()> objTemp([]() { std::cout << "Implement" << std::endl; }); CFunObj funObj; funObj.m_nA = 1; funObj.m_nB = 2; { CAutoCall<decltype(funObj)> objTemp1(funObj); } return 0;}
运行结果
3
Implement
代码分析
CAutoCall采用模板类的方式扩大其应用范围,示例代码中它既可以接收函数指针也可以接收函数对象。
使用函数对象比使用函数指针更灵活,能完成更复杂的操作。
阅读全文
0 0
- 退出作用域时自动调用指定代码
- C#调用进程退出时ExitCode的作用
- android 调用draw(canvas) 函数自动退出
- 自动调用,代码块
- AndroidStudio 代码达到指定字符长度时自动换行
- AndroidStudio代码达到指定字符长度时自动换行
- 对话框退出时,调用函数
- wxWidgets调用指定程序打开文件代码
- wxWidgets调用指定程序打开文件代码
- 解决ubuntu eclipse代码提示崩溃自动退出
- 豆瓣机器人 自动加入/退出小组、自动在小组发帖/删帖、自动回复 Python实现代码
- 操作SVN时,eclipse自动退出
- vs2008程序退出时自动清除注册表!
- 标识符的作用范围,变量的声明和定义,auto,register自动变量,代码作用域的静态变量
- C# 调用 C++ 写的Dll 遇到的问题(调用DLL 自动退出)
- VB 退出窗体时提示是否真的退出代码
- android退出时finish()调用问题
- 自动生成存储过程C#调用代码
- Python的另一种开发环境--Anaconda中的Spyder
- 3课:单片机存储器结构
- string和stringstream用法
- 数据结构与算法 ADT(抽象数据类型)
- 自定义View圆角边框
- 退出作用域时自动调用指定代码
- 16-模板和泛型编程
- 关于编程的一点体会(Tips,持续更新中)
- 七牛云以及video.js的用法教程
- 细说 Lambda 表达式
- ubuntu 14.04 安装为止笔记 添加到桌面
- sublime text2 for mac 配置全集
- 接口测试用例的设计
- 电商笔记-04(简单查询)