Я использую boost spirit qi для анализа входящих данных, а затем отправляю правильную функциональность в зависимости от ее содержимого.Связать сигнал усиления с привязкой phoenix
Я использую boost::signals
для управления обратными вызовами; моя проблема в том, что я, похоже, не могу использовать привязку phoenix с сигналами повышения.
Рассмотрим следующий тестовый случай:
#include <boost/signals.hpp>
#include <boost/spirit/include/qi.hpp>
#include <boost/spirit/include/phoenix_bind.hpp>
#include <boost/spirit/include/phoenix_core.hpp>
#include <iostream>
void f(int i) {
std::cout << i << '\n';
}
int main() {
boost::signal<void(int)> sig;
sig.connect(f);
std::string s="123";
auto first=s.cbegin(), last=s.cend();
boost::spirit::qi::parse(
first, last,
(
boost::spirit::qi::int_
[
boost::phoenix::bind(sig, boost::spirit::qi::_1)
]
)
);
}
Это не компилируется, выплевывая стену ошибок.
Обратите внимание, что, если я заменю феникс привязки линии с
boost::phoenix::bind(&f, boost::spirit::qi::_1)
он работает, как ожидалось (однако из-за большого дизайна программы это не представляется возможным).
Заранее благодарен.
Было бы собрать, если бы вы изменить эту строку в 'повысить :: Bind (подталкивание :: исх (Sig), _1) ' (включить соответствующие заголовки). Однако по какой-то причине мне не удалось передать 'sig' ref by phoenix. –