首頁  >  問答  >  主體

c++14 - C++11/14 有什么技巧能在函数内部获取返回类型么?

大家讲道理大家讲道理2764 天前543

全部回覆(7)我來回復

  • 大家讲道理

    大家讲道理2017-04-17 13:27:35

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

    • 直接指定的函數類型…我沒有發現 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++ 有什麼需要「動態取得」的型別,一切都必須確定,畢竟強型別。

    回覆
    0
  • 迷茫

    迷茫2017-04-17 13:27:35

    自動,decltype

    回覆
    0
  • 天蓬老师

    天蓬老师2017-04-17 13:27:35

    這樣

    decltype(fun())

    回覆
    0
  • 巴扎黑

    巴扎黑2017-04-17 13:27:35

    std::result_of

    回覆
    0
  • 阿神

    阿神2017-04-17 13:27:35

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

    回覆
    0
  • 怪我咯

    怪我咯2017-04-17 13:27:35

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

    雷雷

    }

    回覆
    0
  • 巴扎黑

    巴扎黑2017-04-17 13:27:35

    用decltype

    回覆
    0
  • 取消回覆