Ну, это немного ужасно, но в C ++ 11 ...
#include <vector>
#include <functional>
#include <algorithm>
int foo(int a)
{
return a;
}
int operator-(int b, std::function<int(int)> a)
{
return b - a(b);
}
int main()
{
std::vector<int> v = {1,2,3,4,5};
std::for_each( v.begin(), v.end(), std::bind((int(*)(int, std::function<int(int)>))(&operator-), std::placeholders::_1, &foo) );
return 0;
}
менее ужасный способ использования лямбд
std::for_each(v.begin(), v.end(), [](int a) -> int { return a - foo(a); });