LINUX.ORG.RU

Шаблонный класс из шаблонной функции


0

1

Что то я не понимаю что я делаю не так :(

#include <iostream>

using namespace std;

template <class T>
class Task
{
public:
    Task(T t){}    
};

template <class T>
Task<T> make_task(T t)
{
    return Task(t);
}

int main()
{
   cout << "Hello World" << endl; 
   
   make_task(1);
   
   return 0;
}
main.cpp: In function ‘Task<T> make_task(T)’:
main.cpp:14:16: error: missing template arguments before ‘(’ token
     return Task(t);
                ^

Т.е. можно только вот так?

template <class T>
Task<T> make_task(T t)
{
    Task<T> tmp(t);
    return tmp;
}


Шаблоны-классы не умеют выводить свои аргументы. Попробуй добавить явное указание на параметр T в том месте где ты создаёшь экземпляр класса.

KblCb ★★★★★ ()

return Task(t);

Если бы можно было бы так, то были бы не нужны make_pair, make_tuple и прочие back_inserter'ы.

Begemoth ★★★★★ ()
Ответ на: комментарий от yoghurt

хм, странно. Я был уверен что нельзя после конструктора использовать <>, а так же, то что я это все равно это пробовал. Спасибо, полегчало :)

Cupper ()
Ответ на: комментарий от Cupper

А, это наверно в случае если сам конструктор шаблонный тогда только выведение типов из аргументов и никак нельзя их явно указать.

Cupper ()
Ответ на: комментарий от Cupper

А, это наверно в случае если сам конструктор шаблонный тогда только выведение типов из аргументов и никак нельзя их явно указать.

Cupper ()
Ответ на: комментарий от Cupper

после конструктора

После какого конструктора? Ты создаешь объект типа Task<T>, конструктор у него всегда просто Task() (Task<T>::Task()). Но тип-то Task<T>.

yoghurt ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.