STL: вызов bind2nd с помощью ptr_fun для типов "const T &" - PullRequest
3 голосов
/ 25 июля 2011

Вызов

std::count_if(vec.begin(), vec.end(), std::bind2nd(std::ptr_fun(foo), 17)) 

отлично работает с

bool foo(int, int),

, но я не могу заставить его работать с

bool foo(const int &, const int &)

Есть ли способ сделать этоработать или мне нужно написать собственную функцию адаптера?

1 Ответ

2 голосов
/ 25 июля 2011

Второй аргумент является числом и не может быть преобразован в const int &.

Вы можете использовать boost::bind, чтобы выполнить трюк:

std::count_if (vec.begin(), vec.end(), boost::bind (foo, _1, 17));

РЕДАКТИРОВАТЬ :

Начиная с моего первого ответа, да, вы не можете использовать переменную вместо числа.Я думаю, что проблема в том, что bind2nd и ptr_fun неправильно определены для разыменования типа в том случае, если он является ссылкой, когда ptr_fun строит внутренний объект Operation, поэтому она идет с надстройкойили напишите свой собственный класс функторов.

...