std :: bind не работает - PullRequest
       32

std :: bind не работает

5 голосов
/ 17 апреля 2011

Я не могу заставить std::bind работать так же, как boost::bind работает. Либо я не правильно его использую, либо мой компилятор (GCC 4.4.5) еще не реализовал его правильно.

У меня есть две функции:

void f(int x, int y)
{
    cout << x << " | " << y << endl;
}

template <class UnaryFunction>
void g(UnaryFunction func)
{
    func(100);
}

Я использую bind для вызова f как унарную функцию в g:

g(std::bind(f, 10, std::placeholders::_1));

Это приводит к ошибке компилятора:

error: no match for call to ‘(std::_Bind<void (*(int, std::_Placeholder<1>))(int, int)>) (int)’

... сопровождаемая страницей или около того рвотного компилятора шаблона.

Если я использую boost::bind, например:

g(boost::bind(f, 10, _1));

... работает нормально. Семантика std::bind как-то отличается, или это проблема компилятора?

1 Ответ

5 голосов
/ 17 апреля 2011

Похоже, это просто ваша версия компилятора, gcc 4.5.1 ( через ideone.com ) и 4.6.0 скомпилировали его правильно.

...