decltype of variable template functin
Я хочу вернуть std::future от возвращаемого значения шаблонной функции с переменным числом аргументов, но не могу найти как сделать это правильно.
template <typename T, typename ...Args>
auto add_task(T task, Args ...args)->std::future<decltype(task())>
{
auto wrapper = std::make_shared<std::packaged_task<decltype(task()) ()>>(std::move(task));
{
std::unique_lock<std::mutex> lock(event_mutex);
tasks.push([=, args...]() { (*wrapper)(args); });
}
event.notify_one();
return wrapper->get_future();
}
И второй вопрос, как правильно вызвать эту функцию?
(*wrapper)(args);
(*wrapper)(std::forward<Args>(args)...);
Ответы (1 шт):
Автор решения: Zipper
→ Ссылка
template <typename F, typename ...Args>
auto add_task(F&& task, Args&& ...args) ->std::future<decltype(task(args...))>
{
auto wrapper = std::make_shared<std::packaged_task<decltype(task(args...))()>>(
std::bind(std::forward<F>(task), std::forward<Args>(args)...)
);
{
std::unique_lock<std::mutex> lock(event_mutex);
tasks.push([wrapper]() { (*wrapper)(); });
}
event.notify_one();
return wrapper->get_future();
}