1

単語ごとに読み取るのではなく、ストリームから行単位で読み取るユーティリティ関数のセットがあります。それらは s で動作するので、これらの関数のスコープ内のみで抽出演算子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)代わりにこれを達成するためにローカルでオーバーロードできますか?

4

1 に答える 1

2

あなたが求めていることは不可能です。はすでに存在するistream& >>(istream&, string& )ため、単純に上書きすることはできません。別のタイプを提供することは、すでにそれを行う方法です。

あなたができることの1つは、から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型が抽出プロセスの外に存在する必要がなくなり、コードベースの残りの部分に影響を与えなくなります。

于 2015-04-17T11:39:55.983 に答える