我正在用 spirit::qi 制作一个解析器,目标是让它兼容不同的字符大小。
template < typename Iterator >
struct grammar : qi::grammar < Iterator >
{
grammar () : grammar::base_type ( file, alter_string_size_to < Iterator::value_type > ( _szFile ) )
{
}
qi::rule < Iterator > file;
};
鉴于此
alter_string_size_to < Iterator::value_type > ( _szFile )
成功返回一个指向包含所需字符大小的 _szFile 的字符串的指针。
当我编译时
Iterator = std::wstring::const_iterator
我收到以下错误消息
cannot convert parameter 2 from 'unsigned short *' to 'const std::string &'
所以 .. grammar::base_type 只需要一个 const std::string & 作为第二个参数。 我的问题是,如何告诉 qi::grammar 期望一个字符串及其 Iterators value_type 大小?
提前致谢!
最佳答案
源码中定义如下:
grammar(
start_type const& start
, std::string const& name_ = "unnamed-grammar")
: proto::extends<terminal, base_type>(terminal::make(reference_(start)))
, name_(name_)
{}
std::string name_;
所以你不能。正如文档中所述:
name is an optional string that gives the grammar its name, useful for debugging and error handling.
因此,您必须根据它进行自己的查找。
关于c++ - 具有不同字符大小的 spirit::qi::grammar-name,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9042708/