欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

c++ 類函數(shù)作為模板參數(shù)實現(xiàn)方式詳解

 更新時間:2023年03月01日 10:12:22   作者:予耄遜于荒  
這篇文章主要介紹了c++ 類函數(shù)作為模板參數(shù)實現(xiàn)方式,在實現(xiàn)中加入增強邏輯,這種方式對代碼侵入性過高,而且無法控制該邏輯是否需要,如果不需要的話又得重新修改代碼實現(xiàn),需要的朋友可以參考下

需求背景

DB操作有四種基本操作:Insert、Update、Delete和Query,每種操作需要進行功能增強(eg:支持重試、權(quán)限校驗等),最粗暴的實現(xiàn)就是改動原有接口實現(xiàn),在實現(xiàn)中加入增強邏輯,這種方式對代碼侵入性過高,而且無法控制該邏輯是否需要,如果不需要的話又得重新修改代碼實現(xiàn)。

可以用裝飾者設(shè)計模式對原有接口做一層包裝,然后在包裝層里注入增強實現(xiàn)邏輯,偽碼表現(xiàn)形式:

Status Insert(Args args...);
Status Update(Args args...);
Status Delete(Args args...);
Status Query(Args args...);

Status Wapper(...){
    // 增強邏輯實現(xiàn)
    ...
    // 調(diào)用原有函數(shù)
    Insert(Args args...)
    // 返回處理結(jié)果
    ...
}

實現(xiàn)方式

對于這種通用的增強邏輯及包裝形式,很適合用模板作為統(tǒng)一實現(xiàn),簡化代碼邏輯,并增強后期維護,對于上述場景,有如下兩種模板實現(xiàn)方式:

struct + operator

class DbWapper : public DbOperation{
public:
    // 繼承方法
    Status Insert(Args args...) override;
    Status Update(Args args...) override;
    Status Delete(Args args...) override;
    Status Query(Args args...) override;
private:
    DbOperation *m_dbOperation;
    template <typename Func, typename... Args>
    Status Wapper(Func func, Args &&...args)
    {
        // 調(diào)用原有的函數(shù)邏輯
        Status status = func(std::forward<Args>(args)...);
        // 增強邏輯實現(xiàn)
        ...
        return status;
    }
}
Status Insert(Args args...) {
    // 利用struct + operator實現(xiàn)函數(shù)包裝
    struct InsertFunc {
        DbOperation *dbOperation;
        Status operator()(Args args...) const
        {
            // 調(diào)用原有邏輯
            return dbOperation->Insert(args...);
        }
    } insertFunc{m_dbOperation};
    // 將函數(shù)包裝作為function傳入增強邏輯
    return Wapper(insertFunc, args...);
}

Pass Function Signature

觀察上一種實現(xiàn)方案,發(fā)現(xiàn)struct和operator只是為了構(gòu)造一種函數(shù)參數(shù),便于模板調(diào)用原有邏輯,所以我們可以嘗試消除struct,讓模板只接受具體的函數(shù)簽名,就可以極大簡化實現(xiàn)邏輯,具體實現(xiàn)如下:

class DbWapper : public DbOperation{
public:
    // 繼承方法
    Status Insert(Args args...) override;
    Status Update(Args args...) override;
    Status Delete(Args args...) override;
    Status Query(Args args...) override;
private:
    DbOperation *m_dbOperation;
    template <typename... Args0, typename... Args1>
    Status Wapper(Status (DbOperation::*method)(Args0...), Args1 &&...args)
    {
        // 調(diào)用原有的函數(shù)邏輯
        Status status = (m_dbOperation->*method)(std::forward<Args1>(args)...);
        // 增強邏輯實現(xiàn)
        ...
        return status;
    }
}
Status Insert(Args args...) {
    // 傳入具體的函數(shù)簽名
    return Wapper((Status(DbOperation::*)(Insert函數(shù)簽名))(&DbOperation::Insert), args...);
}

Get busy living or get busy dying.

到此這篇關(guān)于c++ 類函數(shù)作為模板參數(shù)實現(xiàn)方式的文章就介紹到這了,更多相關(guān)c++ 類函數(shù)作為模板參數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++內(nèi)存對象布局小測試

    C++內(nèi)存對象布局小測試

    這篇文章主要介紹了C++內(nèi)存對象布局小測試,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • C++變量存儲的生命周期與作用域?qū)嵗a精講

    C++變量存儲的生命周期與作用域?qū)嵗a精講

    這篇文章主要介紹了C++變量存儲的生命周期與作用域,從創(chuàng)建到消亡的完整過程,例如人從出生到死亡的整個過程就是一個生命周期。本文將通過示例為大家詳細(xì)講講,感興趣的可以學(xué)習(xí)一下
    2022-10-10
  • 全面了解C語言?static?關(guān)鍵字

    全面了解C語言?static?關(guān)鍵字

    這篇文章主要介紹了全面了解C語言?static?關(guān)鍵字,文章首先通過先介紹一下頭文件的創(chuàng)建展開主題的詳細(xì)內(nèi)容,需要的小伙伴可以參考一下
    2022-04-04
  • C語言實現(xiàn)手機電話簿管理系統(tǒng)

    C語言實現(xiàn)手機電話簿管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)手機電話簿管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • C++實現(xiàn)猜數(shù)字小游戲

    C++實現(xiàn)猜數(shù)字小游戲

    這篇文章主要為大家詳細(xì)介紹了C++實現(xiàn)猜數(shù)字小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-10-10
  • C語言實現(xiàn)求定積分的方法

    C語言實現(xiàn)求定積分的方法

    這篇文章主要介紹了C語言實現(xiàn)求定積分的方法,涉及C語言操作相關(guān)數(shù)學(xué)函數(shù)的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • C語言中實現(xiàn)“17進制”轉(zhuǎn)“10進制”實例代碼

    C語言中實現(xiàn)“17進制”轉(zhuǎn)“10進制”實例代碼

    這篇文章主要介紹了C語言中實現(xiàn)“17進制”轉(zhuǎn)“10進制”實例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • c++入門必學(xué)庫函數(shù)sort的基本用法

    c++入門必學(xué)庫函數(shù)sort的基本用法

    Sort函數(shù)包含在頭文件為#include<algorithm>的c++標(biāo)準(zhǔn)庫中,調(diào)用標(biāo)準(zhǔn)庫里的排序方法可以不必知道其內(nèi)部是如何實現(xiàn)的,只要出現(xiàn)我們想要的結(jié)果即可,下面這篇文章主要給大家介紹了關(guān)于c++入門必學(xué)庫函數(shù)sort的基本用法,需要的朋友可以參考下
    2022-11-11
  • C++之編寫高效Makefile文件最佳方法

    C++之編寫高效Makefile文件最佳方法

    在軟件開發(fā)過程中,Makefile是一個非常重要的工具,它可以幫助我們自動化構(gòu)建、編譯、測試和部署,然而,編寫高效的Makefile文件并不是一件容易的事情。在本文中,我們將討論如何編寫高效的Makefile文件,以提高開發(fā)效率和產(chǎn)品質(zhì)量,需要的朋友可以參考下
    2023-05-05
  • strtok函數(shù)的使用示例

    strtok函數(shù)的使用示例

    今天小編就為大家分享一篇關(guān)于strtok函數(shù)的使用示例,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12

最新評論