自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

C++ 慣用法之 Policy-based design

開發(fā) 前端
Policy-based 是 C++ 的一種基于模板和繼承的設(shè)計(jì)方法。通過(guò)模板方式可以實(shí)現(xiàn)在編譯期給指定的類配置方法,而傳統(tǒng)的策略模式則是在運(yùn)行期對(duì)類的方法進(jìn)行動(dòng)態(tài)配置。

一、背景

Policy-based 是 C++ 的一種基于模板和繼承的設(shè)計(jì)方法。通過(guò)模板方式可以實(shí)現(xiàn)在編譯期給指定的類配置方法,而傳統(tǒng)的策略模式則是在運(yùn)行期對(duì)類的方法進(jìn)行動(dòng)態(tài)配置。

所謂設(shè)計(jì)模式?jīng)]有一定不變的使用準(zhǔn)則,同一個(gè)問(wèn)題可以有多種模式來(lái)解決,采用有效的設(shè)計(jì)模式可以減少重復(fù)性代碼以及用最小的改動(dòng)來(lái)應(yīng)對(duì)變化。多了解一種模式,可以增加一種解決問(wèn)題的思路。

二、Policy-based design

1.概述

該模式中的繼承是 implement-by 的關(guān)系,而非 Is-A 的關(guān)系,其重點(diǎn)是模板而非繼承。

2.問(wèn)題描述

假設(shè)一個(gè)類提供一個(gè)對(duì)外的接口,但在不同的場(chǎng)景中有不同的實(shí)現(xiàn)方式,以下是一種常見的實(shí)現(xiàn)代碼:

class demoClass
{
public:
  void func(int type)
{
    //根據(jù)場(chǎng)景指定實(shí)現(xiàn)方式
    switch (type)
    {
    case 1:
      func1(); break;
    case 2:
      func2(); break;
    case 3:
      func3(); break;
    default:
      break;
    }
  }
private:
  void func1() { cout << "used func1" << endl; }//不同的實(shí)現(xiàn)方式
  void func2() { cout << "used func1" << endl; }
  void func3() { cout << "used func1" << endl; }
};

在以上代碼中通過(guò)傳入一個(gè)標(biāo)記參數(shù) type 來(lái)實(shí)現(xiàn)不同的方法調(diào)用,當(dāng)需要增加更多的實(shí)現(xiàn)方式時(shí),需要在類的方法中增加相應(yīng)的判斷代碼,對(duì)既有代碼進(jìn)行修改意味著增加了出錯(cuò)的可能。

3.使用 Policy-based

上述問(wèn)題的解決可以有多種方式,本文記錄一下 Policy-based design 方式。

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;
}

圖片圖片

責(zé)任編輯:趙寧寧 來(lái)源: 編程猿來(lái)如此
相關(guān)推薦

2024-02-01 00:10:21

C++PIMPL編程

2021-06-09 09:49:35

C++RAII語(yǔ)言

2011-06-09 15:15:52

RAII

2009-12-14 10:03:57

Ruby慣用法

2015-07-13 09:46:44

Java習(xí)慣用法

2011-07-15 00:47:13

C++多態(tài)

2010-02-06 16:05:51

C++ Vector

2011-07-14 17:45:06

CC++

2011-07-20 10:06:54

CC++const

2011-07-10 15:26:54

C++

2011-07-13 18:24:18

C++

2015-12-28 13:45:53

Windows 10照片應(yīng)用

2011-04-19 09:19:09

C++指針

2023-09-17 22:50:23

C++編程

2010-02-04 16:35:24

C++ delete

2010-02-06 16:34:40

C++ Memento

2011-04-19 16:38:00

對(duì)象指針指針C++

2011-04-07 16:34:05

staticC++

2024-05-27 00:40:00

C++bitset

2021-10-12 13:35:30

C++Set紅黑樹
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)