簡體   English   中英

基於作為參數的類型的字符串表示具有不同返回類型的函數

[英]Function with different return type based on the string representation of the type as argument

我需要在 C++ 中創建一個函數,該函數根據它獲取的字符串參數返回具有不同類型的結果,該參數表示此類型(在代碼運行的當前機器上)。 例如,這樣的調用:

f("int", ...)

應該返回一個int類型的值,而以下調用:

f("float", ...)

應該返回一個float類型的值。

我想避免任何種類的詳盡開關等,因為我的目標是使這個過程自動化:在沒有先驗知識的情況下,如果給f一個對應於現有類型的字符串,它將返回該類型的值。 我只對原始 C++ 類型感興趣。

我開始相信這甚至是不可能的。 有什么我想念的嗎?

我需要在 C++ 中創建一個函數,該函數根據它獲得的字符串參數返回不同類型的結果

你不能。 函數始終返回一種類型(或引用或void )的對象,該對象不能依賴於參數。 如果您嘗試編寫對此類函數的調用並使用返回值,您就會明白為什么這根本無法在靜態類型語言中工作:

const char* type = get_some_type();
??? variable = f(type);

什么類型將用於代替??? ? 您不能使用float因為在這種假設的語言中,輸入和返回類型可能是"int" 您也不能使用int ,因為返回類型可能float auto也無濟於事,因為它從初始化程序中推斷出類型。 從未知的事物中推導出類型是不可能的。

重載或模板特化彼此之間可能有不同的返回類型,但重載解析發生在編譯時,因此不能依賴於運行時值,例如字符串。


您可以做的是返回一個標記的聯合,例如潛在返回類型的std::variant 但是您確實需要明確地編寫每個案例,除非您想在語言之外使用元編程。 如果在語言中引入了適當的反射特性,這種顯式重復在未來可能變得不必要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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