簡體   English   中英

C ++中模板拆分類構造函數的迭代器類型

[英]iterator type for Template split class constructor in C++

template <class write_iter> //class for splitting a line into individual words
class Split
{
public:
split(const string& line, write_iter destination)
{
    typedef string::const_iterator iter;
    iter i;

    while(i != line.end())
    {
        i = find_if(i, line.end(), not_space);
        iter j = find_if(i, line.end(), space);

        if (i != line.end())
            *destination++ = string(i,j);

        i = j;
    }
}

bool not_space(char c)
{
    return !isspace(c);
}

bool space(char c)
{
    return isspace(c);
}
};

int main()
{
while(getline(cin, line))
    Split<> split(line, back_inserter(words));
}
  • 我希望能夠傳遞我想要的任何迭代器: 例如:back_insterter(somevector),ostream_iterator

  • 對於back_inserter,拆分<? >分裂?

Split <decltype(back_inserter(words))>(line, back_inserter(words));

或者是完整類型:

Split <std::back_insert_iterator<std::vector<std::string>>>(line, back_inserter(words));

除了擁有模板類之外,為什么不僅僅擁有模板構造函數呢? 這會使事情變得容易得多。

那些not_spacespace函數也應該是靜態的,以使find_if起作用。 或將它們移到課堂之外。

還有一件事:back_insert_iterator不需要增加。 *destination = string(i,j); 足夠。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM