1

我有一组实用函数,它们从流中逐行读取,而不是逐字读取。它们与strings 一起使用,因此我只想string在这些函数的范围内本地更改提取运算符。那可能吗?


我现在正在做的是创建 a structthat is astring并仅为该结构编写提取运算符。

struct line{
    string str;
};

istream& operator>>(istream& lhs, line& rhs){
    return getline(lhs, rhs.str);
}

然后提取istream这样的:

vector<line> foo{ istream_iterator<line>(istringstream("Lorem Ipsum\nLorem Ipsum")), istream_iterator<line>() };

这很好用,但我不喜欢struct line包装器。我要问的是,我可以在本地重载istream& operator>>(istream& lhs, string& rhs)来完成这个吗?

4

1 回答 1

2

你所要求的是不可能的。已经存在一个istream& >>(istream&, string& ),所以你不能简单地覆盖它。提供另一种类型已经是这样做的方法。

您可以做的一件事是提供从lineto的转换,std::string以便您的容器可以std::vector<std::string>代替std::vector<line>

struct line{
    string str;
    operator string() const { return str; }
};

istringstream iss("Lorem Ipsum\nLorem Ipsum");
vector<string> foo{istream_iterator<line>(iss),
                   istream_iterator<line>() };

这样,该line类型就不必存在于提取过程之外并渗入您的代码库的其余部分。

于 2015-04-17T11:39:55.983 回答