c++14 - C++11/14 有什么技巧能在函数内部获取返回类型么?
大家讲道理
大家讲道理 2017-04-17 13:25:35
0
7
571
大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回覆(7)
大家讲道理

並不同意 @孫明琦 的觀點。我們現在把問題簡化成四種情況:

  • 直接指定的函數類型…我沒有發現 C++ 有能中途改變函數宣告的回傳類型的,直接寫回傳型別就是了,寫 decltype(fn()) 徒增麻煩。

  • 函數模版,且傳回型別是某個模版參數。那也沒必要「動態獲取」,直接用 T、U 之類的就是了。

  • 函數模版,但傳回型別由另一個運算子決定。考慮下面這個例子:

template <typename T, typename U>
auto fn(T a, U b) { return a + b; }

顯然可知,這裡的 auto == decltype(a + b),所以我們仍然能夠直接指定該變數的型別為 decltype(a + b).

  • lambda。這個也沒什麼差別,反正 lambda 就是匿名 class 的 operator(),回傳值也必須是以上的三種。

綜上所述,我並不認為 C++ 有什麼需要「動態取得」的型別,一切都必須確定,畢竟強型別。

迷茫

自動,decltype

Peter_Zhu

這樣

decltype(fun())
巴扎黑

std::result_of

阿神

動態取得?不可能,C++沒有反射(RTTI除外)
其他答案所說的的decltype和std::result_of都是靜態的,編譯時確定,應該也能符合你的要求

刘奇

自動 fn() -> decltype(表達式)
{

雷雷

}

巴扎黑

用decltype

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板