Сигурен съм, че грешката е много проста и глупава, но не виждам такава. Ето кода:
#include <future>
template <typename ResultType>
class Foo
{
public:
template <typename ...Args>
void exec(const std::function<ResultType(Args...)>& task, Args&&... args) {}
};
int main()
{
Foo<void>().exec([](){});
return 0;
}
И ето я грешката:
'void CAsyncTask::exec(const std::function &,Args &&...)': не можа да изведе шаблонен аргумент за 'const std::function &' с [ ResultType=void]
Foo<void>().exec<void>([](){})
също не работи (и бих предпочел да не се налага да посочвам типовете Args
ръчно).
Актуализация относно предложения отговор: следният код наистина работи. CAsyncTask<void>().exec(std::function<void ()>([](){}));
Но наистина ли няма решение за този проблем? Мога ли да разширя шаблона си по някакъв начин, за да изведа ламбда аргументите?