2016-09-27 45 views
0

我必須從結構中讀取多個字符串,然後使用升壓標記器標記它們。基本上我目前是這樣的:Boost標記器重新分配

typedef boost::tokenizer<boost::char_separator<char> > Tokenizer; 
boost::char_separator<char> sep(";"); 

Tokenizer tok1(str1, sep); 
... 

Tokenizer tok2(str2, sep); 
... 

Tokenizer tok3(str3, sep); 
..... 

請注意,我每次都創建一個新的tokenizer對象。是否有可能使用一個tokenizer對象來做到這一點?這樣的事情:

Tokenizer tok(str1, sep); 
... 

// tok(str2, sep); or tok = Tokenizer(str2, sep) 

PS:我試過以上兩種都失敗了。

回答

1

使用assign成員函數來分配新的令牌源。

#include<iostream> 
#include<boost/tokenizer.hpp> 
#include<string> 

void test(boost::tokenizer<>& tok) 
{ 
    for(boost::tokenizer<>::iterator beg=tok.begin(); beg!=tok.end();++beg){ 
     std::cout << *beg << " : "; 
    } 
    std::cout << '\n'; 
} 

int main() 
{ 
    std::string s = "This is, a test"; 
    boost::tokenizer<> tok(s); 

    test(tok); 

    tok.assign(s); 
    test(tok); 

    tok.assign(s); 
    test(tok); 
} 

預期輸出:

This : is : a : test : 
This : is : a : test : 
This : is : a : test :