我正在製作一個靈魂:: qi的解析器並且旨在使它與不同的字符大小兼容。精神:: 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 &'
所以..語法:: base_type只期待一個常量的std :: string &作爲第二個參數。 我的問題是,我怎麼能告訴qi ::語法期望一個字符串與它的迭代器value_type大小?
在此先感謝!
我在我的帖子中說過如果Iterator :: value_type是char,它會返回一個const char * ...當它的wchar_t,它返回const wchar_t * ...我沒有包含任何代碼,因爲它有絕對沒有目的,問題是語法:: base_type如何接受別的比const std :: string&作爲第二個參數,例如const std :: wstring&... 編輯:評論刪除之前我寫完我的答案^。^無論如何,我把它留在,以防其他人問什麼alter_string_size_to是.. – Andy 2012-01-28 03:40:54
在你的第一個代碼示例中,你在'Iterator :: value_type'前面缺少'typename'(假設它的意思是類型嵌套在'Iterator'中)。 – 2012-01-28 03:42:37
是的,我明白了......但是我對你有壞消息) – vines 2012-01-28 03:42:46