Я уверен, что ошибка очень простая и глупая, но я не вижу ее. Вот код:
#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 ()>([](){}));
Но действительно ли нет решения этой проблемы? Могу ли я как-то расширить свой шаблон, чтобы вывести лямбда-аргументы?