我正在使用 boost spirit qi 解析入站数据,然后根据其内容发送正确的功能。
我boost::signals
用来管理回调;我的问题是我似乎无法将 phoenix bind 与 boost 信号一起使用。
考虑以下测试用例:
#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)
它按预期工作(但是由于程序的设计较大,这是不可能的)。
提前致谢。