Hai*_*Gad 1 c++ boost boost-proto
我正在尝试使用boost :: proto定义一个非常有限的解析器组合库,并且想知道是否可以通过任何方式定义非默认构造的proto终端.
我有这样的结构:
struct symbol
{
   symbol(const string &str): str_(str) {}
   bool operator()(const string &str) const {
      return (str == str_);
   }
   string str_;
};
我想在proto表达式中用作boost原型终端.我能够在它的帮助下使它工作BOOST_PROTO_DEFINE_OPERATORS,但我发现经常不得不将它包装在一个proto::lit()内部proto表达式中有点不方便:
match(symbol("abc") >> (proto::lit(symbol("xyz")) | symbol("klm")))
我想知道我是否可以像这样创建一个proto终端:
proto::terminal<symbol>::type sym;
这将以某种方式能够采取字符串参数并将其传递给符号的构造函数.
注意:我了解Spirit,但我的编译器不太支持它!
您可以将名称sym设为返回终端的函数:
proto::terminal<symbol>::type sym(std::string const& s)
{ return { symbol(s) }; }
很像lit是一个将其参数转换为终端的函数模板.
| 归档时间: | 
 | 
| 查看次数: | 138 次 | 
| 最近记录: |