C++ Advanced, 08_03_TypedStream - Някои детайли
Здравейте,
извинявам се, че питам пак за предишните задачи, но има някои детайли, които не разбирам и не мога да продължа напред докато не си ги изясня:
1/ защо полето не може да е std::istream stream; ?
2/ Защо не можем да подадем в конструктора const референция към стринга?
3/ Какво връща this-> , Защо синтактсисът не е: this->stream.operator>>(item).stream.good()
class TypedStream {
protected:
std::istringstream stream; //ЗАЩО НЕ istream ?
public:
//TypedStream( const std::string& input) : stream(input) {}
TypedStream( std::string input) : stream(input) {} //ЗАЩО КОПИЕ ?
virtual TypedStream<T>& operator>>(T& t) { return *this; }
//virtual TypedStream<T>& operator>>(T& t) = 0;
std::vector<T> readToEnd() {
std::vector<T> v;
T item;
// while (this->stream.operator>>(item).stream.good()) { //ЗАЩО ?
while ((this->operator>>(item)).stream.good()) {
Благодаря.
Да, щом получава istream, а не конкретен stream - от main може да му подадеш и cin, и някой istringstream, и някой ifstream, ще работи. Това пак е заради наследяването, istringstream, ifstream и прочие наследяват istream, съответно нещо, което работи с istream, може да работи с който и да е stream за четене.