我正在处理以下情况:我正在使用 istringstream 的 operator>> 在模板函数中提取格式化数据。除了使用有空间的 std::string 调用函数时,每件事都很好用。例如 std::string tmp("bla tmp"); 众所周知,有一个运算符>>(不是 istringstream 的成员)接受 istream 和字符串,并使用空格作为分隔符提取数据。所以我得到以下“bla”而不是“bla tmp”。长话短说,我试图变得复杂并做了以下事情:
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 从 istream 继承 operator>> 的基本类型,而我从 istringstream 继承。但是通过实现我自己的 operator>> 并通过扩展 istringstream 结果 MyClass 失去了 operator>> 的基本类型。