我有一个类,大致上像这样:
#include <iostream>
class A {
public:
A (std::istream& is): _is(is) {}
void setInputSource (std::istream& is) {
_is = is;
}
A& operator>> (int& x) {
_is >> x;
return *this;
}
private:
std::istream& _is;
};
我希望成员
_is
能够像引用一样工作。也就是说,它必须“指向”一个外部的std::istream
,并且我不希望setInputSource()
方法复制传递的流。问题在于程序无法编译,因为我提到的那个方法正在尝试访问类std::basic_istream<char>
的operator=
。我的目标是使该类在像这样的程序中表现出预期的行为:
int main() {
int a, b;
std::ifstream ifs("myfile.txt");
A myA(std::cin);
myA >> a;
myA.setInputSource(ifs);
myA >> b;
return 0;
}
我曾考虑使用指针,但我更倾向于使用引用,因为它们可以保证不会有无效值,并且我认为这是一种更加优雅的方法。
std::ifstream
,以检查该类的某些特定方法是否在我的类内的其他方法中,并且仅共享缓冲区不会让我进行这些检查(我认为)。 - skatrak