あなたが開発ブランチにいない場合、その単一要素シーケンス適応バグの修正がないので、おそらくそれです.
属性の変換/伝播の汎用性により、多くの変更の余地がありますが、もちろん、それは文書化され、最終的にはコードに含まれています。つまり、魔法はありません。
qi::as<>
Qi の時代には、目的の変換をorで綴るだけでこれを「修正」していましたqi::attr_cast<>
。X3 には (まだ) ありませんが、ルールを使用して非常に簡単に模倣できます。
Live On Coliru
#include <iostream>
#include <boost/fusion/adapted/struct.hpp>
#include <boost/spirit/home/x3.hpp>
namespace x3 = boost::spirit::x3;
struct Name {
std::string value;
};
BOOST_FUSION_ADAPT_STRUCT(Name, value)
int main() {
std::string const input = "Halleo123_1";
Name out;
bool ok = x3::parse(input.begin(), input.end(),
x3::rule<struct _, std::string>{} =
x3::alpha >> *(x3::alnum | x3::char_('_')),
out);
if (ok)
std::cout << "Parsed: " << out.value << "\n";
else
std::cout << "Parse failed\n";
}
版画:
Parsed: Halleo123_1
自動化する
X3 は C++14 のコア言語機能とうまく連携するため、タイピングを減らすのは難しくありません。
Boost.Spirit のリスト演算子 (%) を理解する