我有一组实用函数,它们从流中逐行读取,而不是逐字读取。它们与 string
一起使用,因此我只想在这些函数的范围内本地更改 string
提取运算符。这可能吗?
我现在正在做的是创建一个 struct
,它是一个 string
并仅为该结构编写一个提取运算符。
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)
来完成这个吗?
最佳答案
您所要求的是不可能的。已经存在一个 istream& >>(istream&, string& )
, 所以你不能简单地覆盖它。提供另一种类型已经是这样做的方法了。
您可以做的一件事是提供从 line
的转换至 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
type 不必存在于提取过程之外,也不必渗入代码库的其余部分。
关于c++ - 本地覆盖字符串提取运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29697963/