[英]Non-default constructed boost::proto terminal
我正在嘗試使用boost :: proto定義一個非常有限的解析器組合器庫,並且想知道是否有可能定義非默認構造的原型終端。
我有這樣的結構:
struct symbol
{
symbol(const string &str): str_(str) {}
bool operator()(const string &str) const {
return (str == str_);
}
string str_;
};
我想用作原型表達式中的boost proto終端。 我能夠在BOOST_PROTO_DEFINE_OPERATORS
的幫助下BOOST_PROTO_DEFINE_OPERATORS
,但是我發現經常不得不將其包裝在proto表達式內的proto::lit()
有點不方便:
match(symbol("abc") >> (proto::lit(symbol("xyz")) | symbol("klm")))
我想知道是否可以創建一個像這樣的原型終端:
proto::terminal<symbol>::type sym;
這樣就可以采用字符串參數並將其傳遞給symbol的構造函數。
注意:我了解Spirit,但是我的編譯器並不完全支持它!
您可以使名稱sym
為返回終端的函數:
proto::terminal<symbol>::type sym(std::string const& s)
{ return { symbol(s) }; }
功能模板很像lit
,它將其參數轉換為終端。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.