2015-11-04 60 views
3

我想要寫的函數訪問類型傳遞作爲模板參數

template <class T> 
X foo (T); 

其中Tstd::pair<X, X>類型。

如何從T推導出返回類型X

+1

「T」不是一對時的預期行爲是什麼?如果它是一對兩種不同的類型呢?他們應該以某種不確定的方式工作嗎?他們應該在實例化時失敗嗎?他們是否應該在替代時失敗? – hvd

回答

2

如何

template <class T> 
T foo (std::pair<T, T> bar); 

現在T是你正在尋找的類型(即你的問題X)。

答評論: 如果你不能改變函數簽名在std::tuple_element看看,或者PiotrSkotnicki指出的那樣,簡單地使用

typename T::first_type 
+0

謝謝你的回答。這個工作理論上是可行的,但是這個函數是一個更大的庫的一部分,我不能改變函數簽名 – 1v0

+2

@ 1v0那麼你怎麼想象改變返回類型? –

+0

@Haatschii這裏'std :: tuple_element'比'typename T :: first_type'更好嗎? –

3

在你的榜樣X需要爲模板,太:

template <class T, class X = typename T::first_type > 
X foo (T t); 

但更好的是:

template <class T > 
typename T::first_type foo (T t); 
相關問題