2015-02-08 2 views
1

Я хочу функцию, которая возвращает тип шаблона, но не принимает никаких параметров. Но мойПараметр возврата шаблона C++

template <typename T> 
T getSomeT() { 
    T some; 
    return some; 
} 

не работает, он говорит «error: no matching function for call to 'getSomeT'» и «note: candidate template ignored: couldn't infer template argument 'T'»

Но это работает просто отлично, если добавить некоторые поддельные параметр шаблона в нем:

template <typename T> 
T getSomeT(T fake) { 
    T some; 
    return some; 
} 
+1

Используйте imallett, но также отметить, что это будет работать только для объектов с конструктором по умолчанию и конструктор копирования. – flakes

+1

Если вам нужен тип выражения, вы можете использовать 'decltype (expr)' с C++ 11. – edmz

ответ

7

Как ошибка сообщает вам: «couldn't infer template argument 'T'».

Так сказать ему: ответ

int result = getSomeT<int>(); 
+0

Thanx, получите его. Думал, что он может вывести тип из левой стороны int – user3537411

+1

@ user3537411 N.B. он не может вывести с левой стороны из-за неявного литья/конструкции. По этой же причине функции не могут быть перегружены только с помощью типа возврата. Например. изменение '' '' '' также будет работать в приведенном выше. См. Также [this] (http://www.parashift.com/c++-faq/fn-templates-explicit-calls.html). – imallett

Смежные вопросы