#pragma once

/**
 * @brief A task is anything that can be run.
 */
class Task
{
public:
  Task() {}

  virtual ~Task() {}

  /**
   * @brief Runs the task. To be implemented by derived classes.
   */
  virtual void run() = 0;

private:
  Task(const Task& task);
};