入力ファイルからさまざまなデータ型を解析するパーサーがあります。私はすでに理解しました、その精神はshortとintの間で決定することができます、例えば:
value %= (shortIntNode | longIntNode);
と
shortIntNode %= (qi::short_ >> !qi::double_)
[qi::_val = phoenix::bind(&CreateShortIntNode, qi::_1)];
longIntNode %= (qi::int_ >> !qi::double_)
[qi::_val = phoenix::bind(&CreateLongIntNode, qi::_1)];
このタイプのルールを使用して、doubleも検出しました(こことここの回答から)。パーサーは、65535を超える数値のintと65535未満の数値のshortのどちらかを決定できました。ただし、float_とdouble_の場合、期待どおりに機能しません。次のようなルールがある場合は、これらの値を丸めてfloat値に解析します。
value %= (floatNode | doubleFloatNode);
と
floatNode %= (qi::float_)
[qi::_val = phoenix::bind(&CreateFloatNode, qi::_1)];
doubleFloatNode %= (qi::double_)
[qi::_val = phoenix::bind(&CreateDoubleFloatNode, qi::_1)];
データ型の範囲に応じてfloat_とdouble_のどちらかを決定するオプションやその他のトリックのようなものがあるかどうか知っていますか?
どうもありがとうございます!