[英]C++ Template Default Constructor
模板有點問題:
template <typename T>
T Func(){
std::string somestr = "";
// somestr = ...
if (somestr != ""){
return boost::lexical_cast<T>(somestr);
}
else{
T ret; // warning: "ret may be uninitialized in this function"
return ret;
}
}
如果此函數無法獲得結果,我想返回一個有效的對象,但盡可能為空。 如果我像上面那樣做,我會收到警告“ret可能在此功能中未初始化”。 Try-Catch無法刪除警告..
有沒有辦法像C#中的default
關鍵字一樣?
return default(T); // C#
謝謝!
ret
可能是未初始化的,因為T
可能是POD類型或沒有用戶聲明的構造函數的其他類型。
您可以調用默認構造函數(並對任何POD類型對象進行值初始化),如下所示:
T ret = T();
return ret;
或者,更簡潔,
return T();
這假定T
是默認可構造的。 如果您可能需要使用不是默認構造的類型來實例化此函數,則可以將“默認”大小寫作為參數。 例如,
template <typename T>
T Func(const T& default_value = T())
{
// ...
}
這將允許您仍然可以為默認可構造的類型調用Func()
,還可以顯式提供一個值來返回非類型的類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.