2015-11-04 2 views
3

Я хочу, чтобы написать функциютипа Доступ в станд :: пары проходит в качестве параметра шаблона

template <class T> 
X foo (T); 

где T имеет тип std::pair<X, X>.

Как я могу получить возвращаемый тип X от T?

+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); 
Смежные вопросы