Параметры шаблона могут быть выведены для шаблонов функций , когда тип параметра может быть выведен из параметров шаблона
Таким образом, это может быть выведено здесь:
template <typename T>
void f(T t);
template <typename T>
void f(std::vector<T> v);
но не здесь:
template <typename T>
T f() {
return T();
}
А не в шаблонах классов .
Таким образом, обычное решение вашей проблемы - создать функцию-оболочку, аналогичную стандартной библиотечной функции std::make_pair
:
template <class T>
class MyClass {
public:
MyClass(T t) {}
void print(){
std::cout<<"try MyClass"<<std::endl;
}
};
template <typename T>
MyClass<T> MakeMyClass(T t) { return MyClass<T>(t); }
и затем вызовите auto a = MakeMyClass(5);
для создания экземпляра класса.