首頁 > 後端開發 > C++ > 主體

C 可以從函數回傳類型推導出模板類型嗎?

Mary-Kate Olsen
發布: 2024-11-06 12:23:02
原創
294 人瀏覽過

Can C   Deduce Template Types from Function Return Types?

C 中基於函數傳回類型的模板推導

在C 中,最好利用模板推導來簡化實例化泛型的程式碼基於函數參數的資料類型的函數。考慮以下範例:

<code class="cpp">GCPtr<A> ptr1 = GC::Allocate();
GCPtr<B> ptr2 = GC::Allocate();</code>
登入後複製

我們的目標不是明確指定泛型類型參數,而是使用 GC::Allocate() 函數的傳回類型來實現此推導。然而,C 不允許根據返回類型進行類型推導。

<code class="cpp">class GC
{
public:
    template<typename T>
    static GCPtr<T> Allocate();
};</code>
登入後複製

儘管傳回類型是泛型,但編譯器需要明確指定模板類型參數實例化 GC::Allocate() 函數時。

為了緩解這個限制,可以引入一個輔助函數:

<code class="cpp">template <typename T>
void Allocate(GCPtr<T>& p) {
    p = GC::Allocate<T>();
}</code>
登入後複製

使用這個函數,可以實現最初的目標,如下:

<code class="cpp">GCPtr<A> p;
Allocate(p);</code>
登入後複製

此語法是否比顯式類型規格提供任何顯著優勢是主觀的。

注意:在 C 11 中,可以省略以下之一使用 auto 關鍵字的型別宣告:

<code class="cpp">auto p = GC::Allocate<A>(); // p is of type GCPtr<A></code>
登入後複製

以上是C 可以從函數回傳類型推導出模板類型嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!