spirit :: qi ::具有不同字符大小的语法名称

时间:2012-01-28 03:30:50

标签: c++ boost grammar boost-spirit-qi

我正在使用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大小?

提前致谢!

1 个答案:

答案 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是一个可选字符串,它为语法提供了名称,对调试和错误处理非常有用。

所以,你必须根据它进行自己的查找。