亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何進行C++模板顯式具體化的分析

發布時間:2021-12-18 12:23:00 來源:億速云 閱讀:138 作者:柒染 欄目:開發技術

如何進行C++模板顯式具體化的分析,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

模板函數雖然非常好用,但是也存在一些問題。比如有的操作并不是對所有類型都適用的,針對這種情況C++提供了一個解決方案,就是針對特定類型提供具體化的模板定義。這里的具體可以理解成類型的具體。

我們來看一個C++ Primer當中的例子,假設現在我們有一個結構體叫做job:

struct job {
    string name;
    double salary;
    int floor;
}

對于結構體是可以整體賦值的,所以之前的Swap函數對它一樣適用。

template <typename T>
void Swap(T &a, T &b) {
    T temp = a;
    a = b;
    b = temp;
}

但我們現在希望在交換結構體的時候,只是交換salaryfloor這兩個字段,把name保持不變。由于我們希望引入邏輯變化,所以直接調用Swap函數就不可行了。

當然我們可以不用函數模板,直接重載函數:

void Swap(job &a, job &b) {
    // swap為std自帶的交換函數,在algorithm頭文件中
    swap(a.salary, b.salary);
    swap(a.floor, b.floor);
}

由于C++當中規定,非函數模板的優先級大于函數模板,所以我們在對job結構體調用Swap函數的時候,會優先使用這個。

除此之外,我們還可以提供一個具體化的模板函數:

template <> void Swap<job> (job &a, job &b) {
    swap(a.salary, b.salary);
    swap(a.floor, b.floor);
}

這個函數的寫法看起來有些特殊,我們在函數類型之前加上了template <>,在函數名后面又跟上了<job>。它表示的是這是一個函數模板的顯式具體化,也可以理解成為之前的函數模板提供一個job類型的版本。C++當中規定顯式模板函數的優先級高于普通模板函數。

看完上述內容,你們掌握如何進行C++模板顯式具體化的分析的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

华容县| 吴堡县| 西林县| 监利县| 泸州市| 齐河县| 土默特右旗| 宝山区| 永川市| 临泉县| 哈巴河县| 梁平县| 曲周县| 深圳市| 高阳县| 忻城县| 咸阳市| 双江| 固镇县| 上思县| 吴旗县| 堆龙德庆县| 兖州市| 宝坻区| 调兵山市| 竹山县| 定结县| 安宁市| 雷波县| 威信县| 龙川县| 讷河市| 葵青区| 丰顺县| 长兴县| 山西省| 内江市| 拜泉县| 拉萨市| 南汇区| 长葛市|