【发布时间】:2019-01-28 05:18:44
【问题描述】:
eps 接受计算布尔值的惰性参数。
我一直在将eps 与eps(_r1 == 0) >> something 之类的 pheonix 对象一起使用,并且效果很好。
但是,当我将 lambda 函数用于无法以 phoonix 形式表达的更复杂的表达式时,会引发静态断言并且无法编译。
auto test_lazy_arg_f = [](const auto&, const auto& context) {
return true;
}
boost::spirit::qi::eps(test_lazy_arg_f) >> whatever_i_need;
编译失败,出现以下错误:
/usr/include/boost/spirit/home/qi/nonterminal/rule.hpp:177:13: error: static assertion failed: error_invalid_expression
BOOST_SPIRIT_ASSERT_MATCH(qi::domain, Expr);
https://wandbox.org/permlink/eiM6zDfyzuapcQtB(感谢 Nikita Kniazev)
我没有看到精神文档中对惰性参数的任何限制。
如何使用非 pheonix 函数对象?
【问题讨论】:
-
有趣的是,Lazy Argument 文档中提到了纯函数,但实际上它从未支持过。
-
@NikitaKniazev 啊。这也符合我的经验。我认为它只是从描述语义动作的部分中逐字复制了一点,这确实在许多方面以非常相似的方式评估表达式主要是上下文。
标签: c++ boost boost-spirit boost-spirit-qi