2016-11-18 3 views
0

Я делаю динамический класс char, и у меня есть функция, которая будет вводиться до разделителя и помещена в динамическую строку.C++ - переменная, которая может содержать istreams?

Что мне было интересно, если есть способ сохранить поток в переменной, которая может содержать либо cin, либо ifstream.

В настоящее время я использую функцию перегрузки, но это раздражает необходимость редактировать каждую функцию каждый раз.

ответ

4

Со стандартным компилятором-совместимым, cin является экземпляром некоторого подкласса istream и ifstream класса наследует от istream.

Это означает, что вы можете использовать istream (reference, pointer ...) как параметр функции для всего.

+0

Это очень помогает! Я надеялся, что наследование будет играть в рулон, но не знал, как это сделать. –

1

В настоящее время я использую функцию по загрузке, но это раздражает необходимость редактировать каждую функцию каждый раз.

Вы можете легко уменьшить ваши перегруженные функции, получая std::istream ссылки:

class MyType { 
public: 
     void get(std::istream& is) { 
      is >> x >> y; 
     } 
private: 
     int x; 
     int y; 
}; 

std::istream& operator>>(std::istream& is, MyType& myType) { 
    myType.get(is); 
    return is; 
} 

std::ifstream наследует от std::istream, а также std::cin сек Тип делает. Поэтому вы можете вернуться к справочнику std::istream.

+0

Благодарим вас за исправление моего правописания! –

Смежные вопросы