中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

余庆县| 革吉县| 甘肃省| 武冈市| 孟州市| 神农架林区| 金秀| 会理县| 商河县| 阿瓦提县| 监利县| 安西县| 大港区| 广元市| 莒南县| 涿鹿县| 云阳县| 读书| 安平县| 庐江县| 邯郸市| 开封市| 灵武市| 通辽市| 怀仁县| 大宁县| 巍山| 观塘区| 建水县| 华宁县| 奉节县| 顺昌县| 左云县| 陇南市| 瑞丽市| 安阳县| 迭部县| 玉山县| 康马县| 阜新市| 红安县|