Функциональные объекты были разработаны, чтобы обеспечить сильный уровень абстракции над STL, и в этом отношении они великолепны.
Однако я предпочитаю использовать boost::bind
и вместо этого связывать функцию с алгоритмами STL - обычно (, хотя не в тех случаях, когда объект имеет состояние ), что кажется более элегантным решением. 1006 *
std::for_each( callback.begin(), callback.end(),
boost::bind(&Callback::call(),_1)
);
Кроме того, еще одна предстоящая альтернатива - лямбда в C ++ 0x (пример бессовестно украденного из Википедии):
std::vector<int> someList;
int total = 0;
std::for_each(someList.begin(), someList.end(), [&total](int x) {
total += x;
});
std::cout << total;
Обратите внимание, что из-за замыканий они не имеют ограничения ограничения на отсутствие состояния.