我正在使用spirit :: qi创建一个解析器,目的是使它与不同的char大小兼容。
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 &'
所以..语法:: base_type只期望一个const std :: string&amp;作为第二个参数。 我的问题是,我怎么能告诉qi :: grammar期望一个字符串的迭代器value_type大小?
提前致谢!
答案 0 :(得分:0)
在源代码中定义如下:
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是一个可选字符串,它为语法提供了名称,对调试和错误处理非常有用。
所以,你必须根据它进行自己的查找。