20  void set_stop(
bool t);
 
   25  template <
class Funct, 
typename... Args>
 
   26  auto addTask(Funct f, Args... a) -> std::future<
decltype(f(a...))> {
 
   27    using ret = 
decltype(f(a...));
 
   29    std::function<ret()> fun = std::bind(f, a...);
 
   31    return setFuture(fun);
 
   35  template <
class Return>
 
   36  std::future<Return> setFuture(std::function<Return()> func) {
 
   37    std::shared_ptr<std::packaged_task<Return()>> task =
 
   38        std::make_shared<std::packaged_task<Return()>>(std::move(func));
 
   40    std::future<Return> future = task->get_future();
 
   41    add([task]() { (*task)(); });
 
   48  void add(std::function<
void()> task);
 
   51  std::condition_variable condition_;
 
   53  std::vector<std::thread> workers_;
 
   54  std::queue<std::function<void()>> jobs_;