2012-04-13 43 views
6

如何在以下示例中獲取成員函數的返回類型?成員函數的decltype

template <typename Getter> 
class MyClass { 
    typedef decltype(mygetter.get()) gotten_t; 
... 
}; 

問題當然是我定義MyClass時沒有「mygetter」對象。

我想要做的是:我創建一個緩存,可以使用,因爲它的關鍵,無論是由getter返回。

回答

11

我不太清楚你想要什麼,但它似乎mygetter應該只是Getter類型的任何對象。使用std::declval獲得無任何其他這樣的對象(你只能使用它的類型推演)

typedef decltype(std::declval<Getter>().get()) gotten_t; 
+0

嘿,我從來不知道這一點。棒極了!我總是使用'Getter()。get()'並假定'Getter'是默認可構造的。 – 2012-04-13 17:32:35