У меня есть две следующих функции:C++ нежелательного типа вычет
template<class F, class... Args>
auto runAt(F&& function, const std::chrono::steady_clock::time_point& timePoint, Args&&... args)
-> std::future<typename std::result_of<F(Args...)>::type> {
using return_type = typename std::result_of<F(Args...)>::type;
std::future<return_type> futureResult;
auto packagedTask = std::make_shared<std::packaged_task<return_type()> >
(std::bind(std::forward<F>(function), std::forward<Args>(args)...));
futureResult = packagedTask->get_future();
this->addTask(Task([this, packagedTask]() {
(*packagedTask)();
}), timePoint);
return futureResult;
}
void runAt(const Task& task,
const std::chrono::steady_clock::time_point& timePoint);
В моем файле main.cpp, я создал объект Task, назначенный функцию к нему и толкнул его в мой планировщик. runAt - это функции планировщика.
Это код:
... // Task initialization
scheduler.runAt(task, std::chrono::steady_clock::now());
Проблема заключается в том, что шаблонный функция вызывается вместо одного, принимая задачу в качестве параметра. Я понимаю, что обе функции действительны, поскольку первый параметр является шаблоном, а объект вариационного аргумента пуст.
У меня есть два вопроса:
1) Как называют второй метод (считают, что возвращаемые типы не совпадают)
2) Не очень важно, но мне интересно знать, как это не терпит неудачу во время компиляции
auto packagedTask = std::make_shared<std::packaged_task<return_type()> >
(std::bind(std::forward<F>(function), std::forward<Args>(args)...));
Эти две функции имеют разные имена: 'runTaskAt' и' runAt'. – wilx
'runTask' и' runTaskAt' не перегружают. Они имеют то же имя в вашем коде? – 0x499602D2
Извините, я только что изменил имена, прежде чем писать сообщение, я редактирую свой пост – Luc