примерно так выглядят фанкторы:
Код:
class Functor {
public:
virtual void Call(Smth & smth) = 0;
};
class FunctorA : public Functor {
public:
virtual void Call(Smth & smth) { smth->RunA(); }
};
class FunctorB : public Functor {
public:
virtual void Call(Smth & smth) { smth->RunB(); }
};
в таблице ты хранишь указатели: Functor*
надеюсь стало понятнее