私は次の状況に対処しています: テンプレート関数内で書式設定されたデータを抽出するために、istringstream の operator>> を使用しています。関数がスペースを持つ std::string で呼び出された場合を除いて、すべてがうまく機能します。例 std::string tmp("bla tmp"); 誰もが知っているように、演算子 >> (istringstream のメンバーではない) があり、istream と文字列を取り、スペースを区切り文字として使用してデータを抽出します。したがって、「bla tmp」ではなく、次の「bla」が表示されます。簡単に言うと、私は洗練されたものになるように努め、次のことを行いました。
class MyClass : public istringstream{
public:
MyClass(const char* st) : istringstream(st){}
void operator>>(string& st){st = this->str();}
}
しかし今、私はこの問題に直面しています:
MyClass my("bla tmp");
string tmp;
my >> tmp; // now tmp == "bla temp" and this is exactly what I wanted
//but this does not work
int kk;
my >> kk; //gives me "no match for operator>>"
どうしてですか?istringstream は基本型の operator>> を istream から継承し、I は istringstream を継承しています。しかし、独自の operator>> を実装し、その結果として istringstream を拡張することにより、MyClass は基本型の operator>> を失います。