次のパーサーが解析に失敗する理由がわかりませんtest
。の呼び出し後qi::phrase_parse
、result
は true にit2
なり、文字列の末尾を指しますが、mynr
まだ 0 です。
std::string test = "#define SOMEMACRO 8.0";
auto it2 = test.begin();
auto endIt2 = test.end();
double mynr = 0;
bool result =
qi::phrase_parse(
it2,
endIt2,
("#define" >> (*qi::alnum) >> qi::double_[ref(mynr) = qi::_1]),
qi::space);
私はそれがqi::alnum
スペーススキップと関係があるのではないかと疑っています。
ケースを個々のコンポーネントに減らしてみました。これら 3 つのパーサーを個別に検証したところ、次のことがわかりました。
- 「#define」は実際に「#define」を消費します
(*qi::alnum)
消費することができますSOMEMACRO
qi::double_
消費することができます8.0
個別に、各パーサーは正常に動作しますが、上記の形式でまとめると奇妙に動作します。さらに小さなテストでは、私(*qi::alnum)
が使用しているように使用するとSOMEMACRO
、 .