C 中基於函數傳回型別的範本推導
在C 中,可能需要利用範本推導來簡化實例化泛型的程式碼基於函數參數的資料類型的函數。考慮以下範例:
GCPtr ptr1 = GC::Allocate();
GCPtr ptr2 = GC::Allocate();
我們的目標是使用 GC::Allocate() 函數的傳回類型來實現此推導,而不是明確指定泛型類型參數。但是,C 不允許根據返回類型進行類型推導。
class GC
{
public:
template
static GCPtr Allocate();
};
儘管傳回型別是通用的,編譯器在實例化 GC::Allocate() 函式時需要明確指定範本類型參數 和 。
為了緩解這個限制,可以引入一個輔助函數:
template
void Allocate(GCPtr& p) {
p = GC::Allocate();
}
利用這個函數,可以達到原來的目的:
GCPtr p;
Allocate(p);
此語法是否比顯式型別規格提供任何顯著優勢是主觀的。
注意: 在C 11 中,可以省略一個使用auto 關鍵字的型別宣告:
auto p = GC::Allocate(); // p is of type GCPtr
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3