1 #pragma once
2 
3 #include <mbgl/util/noncopyable.hpp>
4 
5 #include <memory>
6 
7 namespace mbgl {
8 
9 // A movable type-erasing function wrapper. This allows to store arbitrary invokable
10 // things (like std::function<>, or the result of a movable-only std::bind()) in the queue.
11 // Source: http://stackoverflow.com/a/29642072/331379
12 class WorkTask : private util::noncopyable {
13 public:
14     virtual ~WorkTask() = default;
15 
16     virtual void operator()() = 0;
17     virtual void cancel() = 0;
18 
19     template <class Fn, class... Args>
20     static std::shared_ptr<WorkTask> make(Fn&&, Args&&...);
21 };
22 
23 } // namespace mbgl
24