2015-11-04 61 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); 
相关问题