class Task { virtual void Run() = 0; }; class Renderer : public Task { void Run(float time); }; class TaskManager { void RunTasks(); void AddTask(Task*); }; void TaskManager::RunTasks() { foreach(task) task->Run(); }