Używanie std :: bind2nd z odwołaniami
Mam prostą klasę taką jak ta:
class A
{
public:
void f(const int& n)
{
std::cout<<"A::f()" << n <<"\n";
}
};
i próbuję użyć tego w ten sposób:
std::vector<A> vec;
A a;
vec.push_back(a);
std::for_each(vec.begin(), vec.end(), std::bind2nd(std::mem_fun_ref(&A::f), 9));
Ale kiedy kompiluję kod, otrzymuję następujący błąd gdzieś w funkcjonalnym pliku nagłówkowym:
błąd C2529: „_Right”: odwołanie do odniesienia jest nielegalne
Jeśli usunę odniesienie w parametrze f (), kompiluje się dobrze. Jak to rozwiązać? Nie chcę usuwać odniesienia, ponieważ w moim prawdziwym kodzie kopiowanie obiektu jest dość kosztowne. Nie używam też boostu.