![](/img/trans.png)
[英]Use different return type in member function based on template argument size
[英]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.