>>382
イメージがつかめんので、も少し詳しい解説を希望。

俺は

struct Task {
  // 引数はともかく
  virtual void exec() = 0;

  // 固定長ブロックから切り出す
  static void* operator new(size_t);
  static void operator delete(void *);
};

を基底クラスに持ってきて、派生クラスを

class TaskBackground : public Task
{
 // メンバ変数いろいろ
public:
  virtual void exec();
};
みたいに書くのが良いかと思ってたんだが、382 のアイデアは違ってるよね。

タスク連結用のデータは Task に突っ込んでも良いし、別にタスク管理クラスを

class TaskManager {
  typedef std::list<boost::shared_ptr<ITask*> > TTasks;
  typedef std::vector<TTaskList> TTasksList;
  TTasksList m_TasksList;
public:
  TaskHandle add(boost::shared_ptr<ITask*> spTask, unsigned uPrio);
  void remove(const TaskHandle& hTask);
  void exec() {
    for (TTasksList::iterator i = m_TasksList.begin(); i != m_TaskList.end(); ++i)
      for (TTasks::iterator j = i->begin(); j != i->end(); ++j)
        j->exec();
  }
};

って感じで作るのも良いかと考えてた。