通常は、
char x;
while(file >> x) {
// do something with x
}
// now clear file if you want
clear()を忘れた場合は、RAIIスコープベースのクラスを使用してください。
編集:もう少し情報があれば、私はただ言うでしょう
class FileReader {
std::stringstream str;
public:
FileReader(std::string filename) {
std::ifstream file(filename);
file >> str.rdbuf();
}
std::stringstream Contents() {
return str;
}
};
これで、コピーを取得するだけで、毎回ストリームをclear()する必要がなくなります。または、自己清算の参照を持つことができます。
template<typename T> class SelfClearingReference {
T* t;
public:
SelfClearingReference(T& tref)
: t(&tref) {}
~SelfClearingReference() {
tref->clear();
}
template<typename Operand> T& operator>>(Operand& op) {
return *t >> op;
}
};