类成员函数的函数对象与RIIA结合在多返回点函数中的应用

2024-01-18 23:18

本文主要是介绍类成员函数的函数对象与RIIA结合在多返回点函数中的应用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

开发中有时候遇到这种情况:类的某个函数返回时执行一些清理工作,或一些特殊的动作;但是方法中的返回点有很多个,如果在每个返回点都放置清理代码,势必不好的,所以需运用一些技巧;一个可以利用的技巧是C++的RIIA,具体就是编写一个模板类,在类析构的时候执行特定的方法;

代码如下:

template<typename T, typename F>
class CClassFun
{public:	CClassFun(T* p, F f): m_p(p), m_f(f){}~CClassFun(){}void operator()(){(m_p->*m_f)();}protected:T* m_p;F  m_f;	
};template<typename F>
class CAutoRunClassFun
{
public:CAutoRunClassFun(F f): m_f(f){};~CAutoRunClassFun(){m_f();};
protected:F     m_f;
};测试:
class CTest
{public:CTest(){};~CTest(){};void Print(){printf("hello world\n");}void Test(){CClassFun<CTest, void (CTest::*)()> theFun(this, &CTest::Print);CAutoRunClassFun< CClassFun<C_Test, void (CTest::*)()> > theOperation(theFun);}};int main()
{CTest   a;a.Test()return 0;
} 
如果用boost,代码会大大简化,如下:
class AutoRelease
{
public:
AutoRelease(boost::function<void()> f):f_(f)
{
}
~AutoRelease()
{
f_();
}
private:
boost::function<void()> f_;
};
class CTest
{
public:
CTest(){};
~CTest(){};
void Print()
{
printf("hello world\n");
}
void Test()
{
AutoRelease autoR(boost::bind(&CTest::Print,this));
}
}; 
int main() {
CTest   a;
a.Test();
system("pause");
}




这篇关于类成员函数的函数对象与RIIA结合在多返回点函数中的应用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/620582

相关文章

SpringBoot中四种AOP实战应用场景及代码实现

《SpringBoot中四种AOP实战应用场景及代码实现》面向切面编程(AOP)是Spring框架的核心功能之一,它通过预编译和运行期动态代理实现程序功能的统一维护,在SpringBoot应用中,AO... 目录引言场景一:日志记录与性能监控业务需求实现方案使用示例扩展:MDC实现请求跟踪场景二:权限控制与

Pandas中统计汇总可视化函数plot()的使用

《Pandas中统计汇总可视化函数plot()的使用》Pandas提供了许多强大的数据处理和分析功能,其中plot()函数就是其可视化功能的一个重要组成部分,本文主要介绍了Pandas中统计汇总可视化... 目录一、plot()函数简介二、plot()函数的基本用法三、plot()函数的参数详解四、使用pl

Java对象转换的实现方式汇总

《Java对象转换的实现方式汇总》:本文主要介绍Java对象转换的多种实现方式,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Java对象转换的多种实现方式1. 手动映射(Manual Mapping)2. Builder模式3. 工具类辅助映

C语言中位操作的实际应用举例

《C语言中位操作的实际应用举例》:本文主要介绍C语言中位操作的实际应用,总结了位操作的使用场景,并指出了需要注意的问题,如可读性、平台依赖性和溢出风险,文中通过代码介绍的非常详细,需要的朋友可以参... 目录1. 嵌入式系统与硬件寄存器操作2. 网络协议解析3. 图像处理与颜色编码4. 高效处理布尔标志集合

Python的time模块一些常用功能(各种与时间相关的函数)

《Python的time模块一些常用功能(各种与时间相关的函数)》Python的time模块提供了各种与时间相关的函数,包括获取当前时间、处理时间间隔、执行时间测量等,:本文主要介绍Python的... 目录1. 获取当前时间2. 时间格式化3. 延时执行4. 时间戳运算5. 计算代码执行时间6. 转换为指

Python正则表达式语法及re模块中的常用函数详解

《Python正则表达式语法及re模块中的常用函数详解》这篇文章主要给大家介绍了关于Python正则表达式语法及re模块中常用函数的相关资料,正则表达式是一种强大的字符串处理工具,可以用于匹配、切分、... 目录概念、作用和步骤语法re模块中的常用函数总结 概念、作用和步骤概念: 本身也是一个字符串,其中

Java中的Lambda表达式及其应用小结

《Java中的Lambda表达式及其应用小结》Java中的Lambda表达式是一项极具创新性的特性,它使得Java代码更加简洁和高效,尤其是在集合操作和并行处理方面,:本文主要介绍Java中的La... 目录前言1. 什么是Lambda表达式?2. Lambda表达式的基本语法例子1:最简单的Lambda表

Python结合PyWebView库打造跨平台桌面应用

《Python结合PyWebView库打造跨平台桌面应用》随着Web技术的发展,将HTML/CSS/JavaScript与Python结合构建桌面应用成为可能,本文将系统讲解如何使用PyWebView... 目录一、技术原理与优势分析1.1 架构原理1.2 核心优势二、开发环境搭建2.1 安装依赖2.2 验

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字

Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案

《Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案》:本文主要介绍Vue3组件中getCurrentInstance()获取App实例,但是返回nu... 目录vue3组件中getCurrentInstajavascriptnce()获取App实例,但是返回n