Я пытаюсь добавить несколько обычных заданий, которые являются folly :: Function в folly :: ThreadedExecutor.Однако, похоже, что folly :: ThreadedExecutor предоставляет только интерфейс для приема folly::Function<void()>
.Как я могу добавить функцию с аргументами и выводами?
// Here's a simple code segment
#include <folly/executors/ThreadedExecutor.h>
#include <folly/futures/Future.h>
int my_func(int t) {
sleep(t);
return 1;
}
int main() {
folly:ThreadedExecutor executor;
folly:Function<int(int)> job = my_func;
executor.add(job);
}
Компилировать с gcc -o folly_executor --std=c++14 -g -O0 -Wall folly_executor.cc -lgtest -lfolly -lpthread -lglog -lgflags -ldl -ldouble-conversion -levent -liberty -lboost_context
Ошибка говорит о несоответствии add
прототипа функции в executor
и my_func
,Ниже приведена ошибка компиляции.
In file included from folly_executor.cc:2:0:
/usr/local/include/folly/executors/ThreadedExecutor.h:67:8: note:
candidate: virtual void folly::ThreadedExecutor::add(folly::Func)
void add(Func func) override;
^~~
/usr/local/include/folly/executors/ThreadedExecutor.h:67:8: note: no
known conversion for argument 1 from 'folly::Function<int(int)>' to
'folly::Func {aka folly::Function<void()>}'
Интересно, если ограничение добавления прототипа функции имеет необходимую причину.Если нет, то это должен быть правильный способ сделать это.
Кстати, учебник и документ на Github всегда используют folly :: executor с folly: Future.Должен ли я использовать глупость: функция таким образом?