当前位置:首页 > 科技  > 软件

C++ 惯用法之 Policy-based design

来源: 责编: 时间:2024-02-02 16:56:45 298观看
导读一、背景Policy-based 是 C++ 的一种基于模板和继承的设计方法。通过模板方式可以实现在编译期给指定的类配置方法,而传统的策略模式则是在运行期对类的方法进行动态配置。所谓设计模式没有一定不变的使用准则,同一个问

一、背景

Policy-based 是 C++ 的一种基于模板和继承的设计方法。通过模板方式可以实现在编译期给指定的类配置方法,而传统的策略模式则是在运行期对类的方法进行动态配置。oQz28资讯网——每日最新资讯28at.com

所谓设计模式没有一定不变的使用准则,同一个问题可以有多种模式来解决,采用有效的设计模式可以减少重复性代码以及用最小的改动来应对变化。多了解一种模式,可以增加一种解决问题的思路。oQz28资讯网——每日最新资讯28at.com

oQz28资讯网——每日最新资讯28at.com

二、Policy-based design

1.概述

该模式中的继承是 implement-by 的关系,而非 Is-A 的关系,其重点是模板而非继承。oQz28资讯网——每日最新资讯28at.com

2.问题描述

假设一个类提供一个对外的接口,但在不同的场景中有不同的实现方式,以下是一种常见的实现代码:oQz28资讯网——每日最新资讯28at.com

class demoClass{public:  void func(int type){    //根据场景指定实现方式    switch (type)    {    case 1:      func1(); break;    case 2:      func2(); break;    case 3:      func3(); break;    default:      break;    }  }private:  void func1() { cout << "used func1" << endl; }//不同的实现方式  void func2() { cout << "used func1" << endl; }  void func3() { cout << "used func1" << endl; }};

在以上代码中通过传入一个标记参数 type 来实现不同的方法调用,当需要增加更多的实现方式时,需要在类的方法中增加相应的判断代码,对既有代码进行修改意味着增加了出错的可能。oQz28资讯网——每日最新资讯28at.com

3.使用 Policy-based

上述问题的解决可以有多种方式,本文记录一下 Policy-based design 方式。oQz28资讯网——每日最新资讯28at.com

template<typename T>class demoClass:public T{};class func_policy1{public:  void func() { cout << "used func1" << endl; }};class func_policy2{public:  void func() { cout << "used func2" << endl; }};int main(){  demoClass<func_policy1> demo;  demo.func();  system("pause");  return 0;}

图片图片oQz28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-71933-0.htmlC++ 惯用法之 Policy-based design

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 浏览器也拥有了原生的 “时间切片” 能力!

下一篇: Cron表达式语法全解析

标签:
  • 热门焦点
  • 对标苹果的灵动岛 华为带来实况窗功能

    继苹果的灵动岛之后,华为也在今天正式推出了“实况窗”功能。据今天鸿蒙OS 4.0的现场演示显示,华为的实况窗可以更高效的展现出实时通知,比如锁屏上就能看到外卖、打车、银行
  • 红魔电竞平板评测:大屏幕硬实力

    前言:三年的疫情因为要上网课的原因激活了平板市场,如今网课的时代已经过去,大家的生活都恢复到了正轨,这也就意味着,真正考验平板电脑生存的环境来了。也就是面对着这种残酷的
  • 石头智能洗地机A10 Plus体验:双向自清洁治好了我的懒癌

    一、前言和介绍专为家庭请假懒人而生的石头科技在近日又带来了自己的全新旗舰新品,石头智能洗地机A10 Plus。从这个产品名上就不难看出,这次石头推出的并不是常见的扫地机器
  • 如何正确使用:Has和:Nth-Last-Child

    我们可以用CSS检查,以了解一组元素的数量是否小于或等于一个数字。例如,一个拥有三个或更多子项的grid。你可能会想,为什么需要这样做呢?在某些情况下,一个组件或一个布局可能会
  • 三星Galaxy Z Fold5官方渲染图曝光:13.4mm折叠厚度依旧感人

    据官方此前宣布,三星将于7月26日在韩国首尔举办Unpacked活动,届时将带来带来包括Galaxy Buds 3、Galaxy Watch 6、Galaxy Tab S9、Galaxy Z Flip 5、
  • iQOO 11S新品发布会

    iQOO将在7月4日19:00举行新品发布会,推出杭州亚运会电竞赛事官方用机iQOO 11S。
  • 首发天玑9200+ iQOO Neo8系列发布首销售价2299元起

    2023年5月23日晚,iQOO Neo8系列正式发布。其中,Neo系列首款Pro之作——iQOO Neo8 Pro强悍登场,限时售价3099元起;价位段最强性能手机iQOO Neo8同期上市
  • 苹果MacBook Pro 2021测试:仍不支持平滑滚动

    据10月30日9to5 Mac 消息报道,苹果新的 14 英寸和 16 英寸 MacBook Pro 2021 上市后获得了不错的评价,亮点包括行业领先的性能,令人印象深刻的电池续航,精美丰
  • 北京:科技教育体验基地开始登记

      北京“科技馆之城”科技教育体验基地登记和认证工作日前启动。首批北京科技教育体验基地拟于2023年全国科普日期间挂牌,后续还将开展常态化登记。  北京科技教育体验基
Top