См. std::bind1st
и std::bind2nd
.Они довольно неуклюжи и уродливы в использовании, но если вы настаиваете на том, чтобы использовать только то, что присутствует в C ++ 03, без каких-либо дополнений, то они почти все, что доступно.
Редактировать: когда / еслиМне нужно сделать это, я обычно делаю это с небольшим классом функторов вместо использования std::bind1st
и / или std::bind2nd
.В конечном счете, это не сильно отличается от того, что они генерируют, но (IMO), как правило, более читабельно.
template<class T>
class invoke_do_something {
int value;
public:
adder(int x) : value(x) {}
void operator()(T &t) {
t.do_something(value);
}
};
std::for_each(list.begin(), list.end(), invoke_do_something(1));
Однако я считаю, что в большинстве случаев это своего рода пластырь,Это происходит постоянно, используя for_each
.Я обычно нахожу, что, подумав, я могу найти более подходящий алгоритм, который часто исключает необходимость чего-либо в этом порядке.