2013-11-23 31 views
3

使用c + + 11:確定涉及模板類型參數的表達式的結果類型?

我想聲明一個類型是減去兩個模板參數類型值的結果。

如何在我的模板中對此進行編碼?

實施例:

template<typename T> 
class C { 
    typedef T member_t; 
    typedef TYPE_OF_RESULT_OF(T - T) member_diff_t; 
}; 

什麼是更換爲 「TYPE_OF_RESULT_OF(T - T)」 在上面的?

我期待計算任何算術類型的有符號差異。所以我想我可以使用as_signed(T)。但問問編譯器似乎更正確,如果這是有道理的。

回答

7

簡單的解決辦法是這樣的:

#include <type_traits> 

using member_diff_t = typename std::decay< 
    decltype(std::declval<T>() - std::declval<T>())>::type; 

decay可以確保你得到的裸體類型,剝去引用,以防操作返回一個參考。

+0

感謝您的快速回復。我在第二個typename上出現錯誤,但這可能是一個鏗鏘聲++問題。我會升級並重試。 –

+1

@austinhastings第二個'typename'是無關的。 – Casey

+0

@Casey:謝謝你解決這個問題。 –