访问std :: pair内部的类型作为模板参数传递

时间:2015-11-04 16:15:53

标签: c++ c++11 typetraits

我想写一个函数

template <class T>
X foo (T);

其中T的类型为std::pair<X, X>

如何从X中推断出返回类型T

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:2)

怎么样

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

现在T是您要查找的类型(即问题中的X)。

回答评论: 如果您无法更改函数签名,请查看std::tuple_element,或者如PiotrSkotnicki指出的那样,只需使用

typename T::first_type