Этот код был разработан и первоначально работал с boost 1.48. Начиная с обновления для повышения 1.52 он отказывается компилировать.Перегруженная функция пересылки
boost::signals2::signal<void (uint32_t)> foo;
boost::shared_ptr<boost::circular_buffer<uint32_t>> _foo_buffer = new boost::circular_buffer<uint32_t>(32);
_foo.connect(boost::bind(&boost::circular_buffer<uint32_t>::push_front, _foo_buffer, _1));
Цель состоит в том, чтобы иметь место foo(42)
42
на передней части кольцевого буфера.
Ошибка компиляции: No matching function for call to 'bind'
с букетом Candidate template ignored: couldn't infer template argument 'R'
и схожие ошибки шаблона.
Я подозреваю, что проблема заключается в том, что между версиями наддува, которые я использую, определение для push_front изменилось с
void push_front(const_reference item = value_type());
до трех определений
void push_front(param_value_type);
void push_front(rvalue_type);
void push_front();
и это путать мой компилятор.
Я бы очень признателен за помощь в синтаксисе выражения connect, которое будет работать с новой библиотекой boost. Благодаря
Статический метод приведения не работает для меня, однако это может быть синтаксическая ошибка. 'static_cast :: *) (uint32_t)> (& boost :: circle_buffer :: push_front)' просто породил подобные ошибки для оригинала. В настоящее время я не на своем компьютере, поэтому я не могу их процитировать. Однако, C++ lambdas отлично работал для меня, так что это уже не проблема. Благодарю. –
JamesL