1

我正在制作一个带有 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 size 的字符串?

提前致谢 !

4

1 回答 1

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 是一个可选字符串,它给出了语法的名称,对于调试和错误处理很有用。

因此,您必须根据它进行自己的查找。

于 2012-01-28T03:46:44.370 回答