温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

efective C++ 条款35:考虑除virtual函数外的其他选择

发布时间:2020-04-01 08:50:30 来源:网络 阅读:411 作者:风生风雨 栏目:编程语言

1.籍由NVI手法 实现 Template Method 模式

Template Method 模式

    对于某一个业务逻辑(算法实现)在不同的对象中有不同的细节实现,但是逻辑(算法)的框架(或通用的应用算法)是相同的。Template Method提供了这种情况的一个实现框架。

Template Method模式是采用继承的方式实现这一点:将逻辑(算法)框架放在抽象基类中,并定义好细节的接口,子类中实现细节。

其关键点就是将通用算法封装在抽象基类中

NVI手法中所用的non_virtual函数成为virtual函数的外敷器。

NVI手法的优点在于

外敷器确保得以在一个virtual函数被调用之前设定好情景,并在调用结束后清理情景。

 

2.籍由Function pointer 实现 Strategy模式

Strategy模式

Strategy模式解决的是和Template Method模式类似的问题,但是Strategy模式是将逻辑(算法)封装到一个类中,并采取组合(委托)的方式解决这个问题。

  

    要实现一个抽象接口,继承是一种方式:我们将抽象接口声明在基类中,将具体的实现放在具体子类中。组合(委托)是另外一种方式:我们将接口的实现放在被组合对象中,将抽象接口放在组合类中。

3.籍由std:function完成Strategy模式

通过std::function对C++中各种可调用实体(普通函数、Lambda表达式、函数指针、以及其它函数对象等)的封装,形成一个新的可调用的std::function对象;

关于可调用实体转换为std::function对象需要遵守以下两条原则:

转换后的std::function对象的参数能转换为可调用实体的参数;

可调用实体的返回值能转换为std::function对象的返回值。

 

std::function实现了一套类型消除机制,可以统一处理不同的函数对象类型。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI