簡體   English   中英

C ++函數返回類型作為模板

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM