簡體   English   中英

非默認構造的boost :: proto終端

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM