Я пишу класс для достижения функции задачи. Вот мой код:C++ 11 асинхронное программирование с использованием шаблона
template<typename TType>
class YHMTask
{
public:
YHMTask() {};
std::future<TType> mTask;
};
template<typename T>
YHMTask<T> YHMCreateTask(std::function<T()> func)
{
YHMTask<T> yhmTask;
yhmTask.mTask = std::async(func);
return yhmTask;
}
Если я не использовал шаблон в YHMCreateTask, я могу использовать его как это:
YHMCreateTask([]{return 12;});
Но когда я пишу эту функцию с помощью шаблона. отчет компилятора эта ошибка:
error C2672: 'YHMCreateTask': no matching overloaded function found
error C2784: 'YHMTask<TType> YHMCreateTask(std::function<_Type(void)>)': could not deduce template argument for 'std::function<_Type(void)>' from 'main::<lambda_a66b482c6cd6dab7208879904592bde5>'
Я должен использовать YHMCreateTask как это:
int TestFunc()
{
return 11;
}
...
std::function<int(void)> funInt = TestFunc;
auto taskNew = YHMCreateTask(funInt);
Я хочу YHMCreateTask может быть использован как YHMCreateTask ([] {вернуться 12;}); Как мне это сделать?
, относящиеся к [как к обращенным-а-лямбда-к-ан-stdfunction-используя -templates] (http://stackoverflow.com/questions/13358672/how-to-convert-a-lambda-to-an-stdfunction-using-templates) – Jarod42