最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解C++泛型裝飾器

 更新時間:2021年11月16日 15:54:24   作者:Silent_Blue_Sky  
這篇文章主要為大家介紹了C++的泛型裝飾器,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

c++ 裝飾器

本文簡單寫了個 c++ 裝飾器,主要使用的是c++ lamda 表達式,結合完美轉發(fā)技巧,在一定程度上提升性能

#define FieldSetter(name, type, field) \
    type field;                                   \
    name() {}                   \
    name(const type& field): field(field) { \
        cout << "[左值 " << field << "]" << endl;                                   \
    } \
    name(const type&& field) : field(move(field)){ \
        cout << "[右值 " << field << "]" <<  endl; \
    } \
    name(const name& other) {          \
         field = other.field; \
         cout << "[左值 " << other.field << "]" << endl;                          \
    } \
    name(const name&& other) {         \
        field = move(other.field);                             \
          cout << "[右值 " << other.field << "]" <<  endl; \
    }
struct ObjectField {
    FieldSetter(ObjectField, string, name);
};
struct AgeField {
    FieldSetter(AgeField, int, age);
};
struct SexField {
    FieldSetter(SexField, string, sex);
};
void DecoratorTest() {
    auto Object = [](auto ob) {
        cout << ob.name << endl;
    };
    auto Age = [](auto age) {
        cout << age.age << endl;
    };
    auto sex = [](auto sex) {
        cout << sex.sex << endl;
    };
    auto withDecorator = [](auto &&head, auto &&tail, auto &&...hargs) {
        head(forward<decltype(hargs)>(hargs)...);
        return [f = std::move(tail)](auto &&...args) {
            return f(forward<decltype(args)>(args)...);
        };
    };
    auto nameWithAge = withDecorator(Object, Age, ObjectField("nic"));
    auto withDecoratorWithSex = withDecorator(nameWithAge, sex, AgeField(18));
    withDecoratorWithSex(SexField("man"));
}
int main() {
    DecoratorTest();
}

輸出

在這里插入圖片描述

對輸出的解釋

左值:表示傳參的過程中調用了拷貝構造函數

右值:表示在傳參過程中調用的是 移動構造函數

總結

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注腳本之家的更多內容!

相關文章

  • C++中fstream,ifstream及ofstream用法淺析

    C++中fstream,ifstream及ofstream用法淺析

    這篇文章主要介紹了C++中fstream,ifstream及ofstream用法,適合C++初學者學習文件流的操作,需要的朋友可以參考下
    2014-08-08
  • C++數據結構之哈希算法詳解

    C++數據結構之哈希算法詳解

    這篇文章主要為大家詳細介紹了C++數據結構中哈希算法的相關資料,文中的示例代碼講解詳細,具有一定的借鑒價值,希望對大家有所幫助
    2022-12-12
  • C語言使用stdlib.h庫函數的二分查找和快速排序的實現代碼

    C語言使用stdlib.h庫函數的二分查找和快速排序的實現代碼

    以下是對C語言使用stdlib.h庫函數的二分查找和快速排序的實現代碼進行了詳細的介紹,需要的朋友可以過來參考下。希望對大家有所幫助
    2013-10-10
  • 深入淺析STL vector用法

    深入淺析STL vector用法

    這篇文章給大家介紹 stl vector用法,主要知識點在如何恰當的使用它們的成員函數,涉及到條件函數和函數指針在迭代算法中的使用,對stl vector用法感興趣的朋友可以參考下本文
    2015-10-10
  • C++中引用的相關知識點小結

    C++中引用的相關知識點小結

    引用是C++一個很重要的特性,顧名思義是某一個變量或對象的別名,對引用的操作與對其所綁定的變量或對象的操作完全等價,這篇文章主要給大家總結介紹了C++中引用的相關知識點,需要的朋友可以參考下
    2022-03-03
  • 關于C語言一維數組算法問題詳解

    關于C語言一維數組算法問題詳解

    數組是以順序格式排列的均勻數據的集合,在C語言中學習數組的概念非常重要,因為它是基本的數據結構,這篇文章主要給大家介紹了關于C語言一維數組算法問題的相關資料,需要的朋友可以參考下
    2021-11-11
  • Qt連接MySQL數據庫的實現(保姆級成功版教程)

    Qt連接MySQL數據庫的實現(保姆級成功版教程)

    本文主要介紹了Qt連接MySQL數據庫的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • C語言實現棧的示例詳解

    C語言實現棧的示例詳解

    棧是一種特殊的線性表,只允許從一端進出數據,稱為后進先出,先進后出。本文主要為大家介紹了C語言實現棧的示例代碼,感興趣的可以了解一下
    2022-06-06
  • C語言實現圖形化打磚塊游戲

    C語言實現圖形化打磚塊游戲

    這篇文章主要為大家詳細介紹了C語言實現圖形化打磚塊游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • C++ 內聯函數inline案例詳解

    C++ 內聯函數inline案例詳解

    這篇文章主要介紹了C++ 內聯函數inline案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-09-09

最新評論

台湾省| 孟连| 荃湾区| 醴陵市| 榆社县| 剑川县| 贡觉县| 濉溪县| 边坝县| 泸定县| 尼勒克县| 新巴尔虎左旗| 康保县| 吉林市| 靖安县| 洪江市| 彩票| 顺昌县| 永嘉县| 遂川县| 高碑店市| 南安市| 琼结县| 汨罗市| 育儿| 石楼县| 格尔木市| 泰来县| 普格县| 绥宁县| 余干县| 东山县| 泗洪县| 海淀区| 龙岩市| 奇台县| 土默特左旗| 梨树县| 封丘县| 河南省| 龙海市|