在我的一条规则中,将 qi::locals<> 与 stl 容器作为参数。当我在没有 BOOST_SPIRIT_QI_DEBUG 的情况下编译我的程序时,一切正常。但是当我打开 BOOST_SPIRIT_QI_DEBUG 时,由于缺少运算符 <<,程序无法编译。
简化片段:
typedef std::list< int > TlstValues;
template <typename Iterator, typename Skipper>
struct G_test : qi::grammar<Iterator, Skipper>
{
...
G_test() : G_test::base_type(rule_test)
{
...
BOOST_SPIRIT_DEBUG_NODE(rule_test);
}
qi::rule<Iterator, qi::locals<TlstValues>, Skipper> rule_test;
}
错误:
error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'TlstExpressionItems' (or there is no acceptable conversion)
我试图为 TlstValues 定义流式操作符,但没有效果。错误还是一样。我的运营商定义:
std::ostream& operator << (std::ostream& os, TlstValues & z)
{
return os;
}
有人可以告诉我如何定义所需的运算符以使 BOOST_SPIRIT_DEBUG 工作吗?
谢谢和问候瑞克