91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

如何進行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

琼结县| 钟祥市| 拜城县| 平山县| 平昌县| 慈利县| 武威市| 惠安县| 乐昌市| 朝阳区| 华安县| 张家界市| 阿瓦提县| 长治县| 威海市| 昭平县| 乡城县| 景洪市| 泸西县| 石门县| 汝州市| 三门县| 汤原县| 临汾市| 基隆市| 兴文县| 龙岩市| 盘锦市| 余庆县| 临海市| 错那县| 将乐县| 靖州| 阿拉善右旗| 新建县| 赞皇县| 屏南县| 大同县| 莱州市| 兴文县| 镇安县|