Я задаюсь вопросом, почему следующие дает мне сообщение об ошибке:Почему std :: bind1st не работает над свободными функциями?
bool is_divisible(int by, int n)
{
return (n % by) == 0;
}
int main()
{
vector<int> v {1, 2, 3, 4, 5};
cout << count_if(v.begin(), v.end(), bind1st(is_divisible, 2)) << endl;
}
Однако, если я использую bind(is_divisible, 2, _1)
, это работает. Мне интересно, какая техническая разница между bind1st
и bind
, что заставляет последние работать в этом случае?
Фраза вроде «дает мне ошибку» должна немедленно сопровождаться самой ошибкой. – Adam
@Adam Компилятор выводит довольно много, но ошибки, похоже, сосредоточены вокруг 'error: 'bool (*) (int, int)' не является классом, структурой или типом union'. К сожалению, я недостаточно разбираюсь в bind1st, чтобы разобрать это. Довольно интересно, если я присваиваю is_divisible к 'std :: function', а затем использует bind1st, тогда он работает. Мне интересно узнать, что происходит за кулисами, что позволяет bind1st работать в некоторых из этих случаев, а не в других. –
Возможный дубликат [Как использовать bind1st и bind2nd?] (Http://stackoverflow.com/questions/1418756/how-to-use-bind1st-and-bind2nd) – nurettin