我想創建一個帶有模板引數的類和一個回傳類實體的函式(也帶有模板引數)。
但是,對于較短的代碼,我想在回傳類構造的結果時省略模板引數。
我不知道如何稱呼這種技術以及是否可能。
為了更好地描述我的問題,下面的代碼是我理想中尋求的示例。
template <typename T>
class Class
{
public:
Class()
{
// Construction
};
};
Class<int>
Function()
{
return Class();
// not Class<int>();
}
int main()
{
Class<int> instance = Function();
}
根據我應用這種技術的方式,我可能還需要使用多個模板引數。
謝謝你。
uj5u.com熱心網友回復:
這是不可能的。模板型別在編譯后是具體的,不像語言那樣C#有元資料,所以它可以允許不完整的泛型型別,C 不是。喜歡Class<>or的型別Class<int,>是不可能的。
您可以這樣做Class<void>并讓模板推導填補空白(雙關語)。或者您可以對函式本身進行模板化:
template <class TInner>
Class<TInner> Function()
{
return Class<TInner>();
}
祝你好運。
uj5u.com熱心網友回復:
您不必在 return 陳述句本身中命名回傳型別,以下作業:
Class<int>
Function()
{
return {}; // Calls Class<int>::Class() ctor.
}
但是,如果您需要在函式中創建該類的實體,我建議您回傳auto:
auto Function()
{
Class<int> instance;
//Do something with instance...
return instance;
}
uj5u.com熱心網友回復:
您可以將輸出引數傳遞給函式:
template <class TInner>
void Function(Class<TInner>& r)
{
r = Class<TInner>();
}
并稱之為:
int main()
{
Class<int> instance
Function(instance);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/515148.html
標籤:C 模板ctad
上一篇:C 20概念對模板化函式應用約束
