// 考えてみた方法2(オブジェクト毎に関数ポインタを持つオーバーヘッドが気になる)
class DoSomething {
public:
void Unregister(Base*);
void Action() {
obj_.push_back(Derived<DoSomething>(&DoSomething::Unregister));
//以下略
}
private:
list<Base*> obj_;
};

template <class Manager>
class Derived : Base {
Derived((typename Manager::*Unregister)(Base*)) : Unregister_(Unregister) {}
void F() {
(*Unregister_)(this);
}
private;
void (typename Manager::*Unregister_)(Base*);
};

どういう設計が良いのでしょうか?