日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

C++ 慣用法之 Policy-based design

來源: 責編: 時間:2024-02-02 16:56:45 221觀看
導讀一、背景Policy-based 是 C++ 的一種基于模板和繼承的設計方法。通過模板方式可以實現在編譯期給指定的類配置方法,而傳統的策略模式則是在運行期對類的方法進行動態配置。所謂設計模式沒有一定不變的使用準則,同一個問

一、背景

Policy-based 是 C++ 的一種基于模板和繼承的設計方法。通過模板方式可以實現在編譯期給指定的類配置方法,而傳統的策略模式則是在運行期對類的方法進行動態配置。FaO28資訊網——每日最新資訊28at.com

所謂設計模式沒有一定不變的使用準則,同一個問題可以有多種模式來解決,采用有效的設計模式可以減少重復性代碼以及用最小的改動來應對變化。多了解一種模式,可以增加一種解決問題的思路。FaO28資訊網——每日最新資訊28at.com

FaO28資訊網——每日最新資訊28at.com

二、Policy-based design

1.概述

該模式中的繼承是 implement-by 的關系,而非 Is-A 的關系,其重點是模板而非繼承。FaO28資訊網——每日最新資訊28at.com

2.問題描述

假設一個類提供一個對外的接口,但在不同的場景中有不同的實現方式,以下是一種常見的實現代碼:FaO28資訊網——每日最新資訊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 來實現不同的方法調用,當需要增加更多的實現方式時,需要在類的方法中增加相應的判斷代碼,對既有代碼進行修改意味著增加了出錯的可能。FaO28資訊網——每日最新資訊28at.com

3.使用 Policy-based

上述問題的解決可以有多種方式,本文記錄一下 Policy-based design 方式。FaO28資訊網——每日最新資訊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;}

圖片圖片FaO28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-71933-0.htmlC++ 慣用法之 Policy-based design

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 瀏覽器也擁有了原生的 “時間切片” 能力!

下一篇: Cron表達式語法全解析

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 谢通门县| 五大连池市| 武威市| 全椒县| 宜良县| 怀化市| 南江县| 全南县| 鄯善县| 汉阴县| 安徽省| 南宫市| 简阳市| 肇庆市| 清水河县| 华坪县| 南木林县| 玛纳斯县| 安溪县| 兴化市| 米脂县| 马山县| 永顺县| 金华市| 汝城县| 大关县| 车险| 万宁市| 抚远县| 耒阳市| 乌海市| 婺源县| 新和县| 和平区| 沛县| 黑山县| 西宁市| 巴里| 土默特左旗| 义马市| 东乌|