[英]C++ Function return type as template
我想編寫一個函數來根據參數的值返回不同的類對象。 返回類對象是模板化的。 我將類名作為函數的模板參數,
template< class T >
static T FindClassObjects(int var){
if(var==1)
return T<float>(var);
else
return T<int>(var);
我可以這樣做嗎?
我想編寫一個函數來根據參數的值返回不同的類對象。 [...]我可以這樣做嗎?
簡答:不。
答案很長。
C / C ++語言是強類型的; 每個函數都返回一個必須在編譯類型中知道的類型。
因此,不可能有一個函數返回一個依賴於運行時已知值的類型。
如果在編譯時知道值var
,則會有所不同:在這種情況下,您可以開發返回不同類型的不同函數,編譯時根據var
值選擇要調用的函數。
無論如何,你可以用不同的方式繞過這個限制。
如果你可以使用C ++ 17,你可以返回一個std::any
,它可以包含任何類型; 或者(更好的是,我想)一個std::variant
,它可以在前綴類型列表中包含一個值。
否則,如果不同的typed具有公共基類,則(通過示例)可以返回指向基類的指針。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.