我正在用 boost::tokenizer 替换 RWCTokenizer 并且我无法编译它,因为代码是当前设计的。这就是它现在基本上在做的事情:
parse.h
RWCTokenizer* myTokenizer;
parse.C
function parse::A
myTokenizer = new RWCTokenizer(myTokenLine);
function parse::B
token = ((*myTokenizer)());
function parse::C
if(myTokenizer == EcDNull)
{
return ""; // end of tokens
}
所以基本上他们在 A 中设置解析,在 B 中获取标记,并在 C 中检查结尾。
因此,我需要在包含中声明迭代器和 tok 变量,以便 A、B 和 C 可以访问它们。但是当我编译时,myTok 说它需要 2 个参数,所以我不知道如何保存该信息。这是目前我试图做的:
parse.h
boost::tokenizer< boost::char_separator<char> > myTok;
boost::tokenizer< boost::char_separator<char> >::iterator myTokenizer2;
parse.C
function parse::A
boost::char_separator<char> sep(" "); // break on white space
std::string myTokenLine_TMP = myTokenLine.data();
boost::tokenizer< boost::char_separator<char> > tok(myTokenLine_TMP, sep);
myTokenizer = tok.begin();
myTok = tok;
function parse::B
RWCString token = *myTokenizer;
myTokenizer++;
function parse::C
if (myTokenizer == myTok.end())
{
return ""; // end of tokens
}
我在网上看到的唯一示例是 ac main 函数中的 boost 代码,其中所有示例与 C++ 类示例相比。现在我唯一能想到的另一件事是在类的顶部声明 boost 的东西是静态的,这是我真的不想做的事情。
如果我可以保存 myTok.end() 部分,我应该能够编译。但我认为我需要保持结构,因为我正在解析的行被传递到 tok(myTokenLine_TMP, sep) 并且当我离开函数时它应该超出范围,因此保存 end() 部分将毫无用处。
那么如何在 C++ 类中做到这一点呢?