Вы были действительно, очень близки:
void calc(int x) {
std::for_each(v.begin(), v.end(),
boost::bind(&foo::func2, this, _1, x));
}
РЕДАКТИРОВАТЬ: упс, как и я. Хех.
Хотя, если подумать, в вашем первом рабочем примере нет ничего плохого. Вы должны действительно отдавать предпочтение свободным функциям по сравнению с функциями-членами, где это возможно - вы можете увидеть увеличенную простоту вашей версии.