Von std::cin oder aus Datei lesen, je nach Parameter?



  • Hi,
    ich hab mal eine richtig peinliche Frage und zwar möchte ich folgendes:

    void Read( std::??? &In )
    {
    /*
    Hier soll nun mit In gearbeitet werden. 
    Ich möchte also einfach mit In arbeiten und,
    je nachdem was in In drinne ist soll entweder aus einer Datei,
    oder von std::cin gelesen werden ohne extra Behandlungen dazu einzuprogrammieren oder eine neue Funktion anzulegen.
    */
    }
    

    Ich möchte also als Parameter eine Datei oder std::cin haben was muss dafür anstatt von "???" hin? Oder geht sowas garnicht? Ich möchte auch keine zwei Funktionen schreiben sondern es soll eben maximal diese eine sein!
    Ich hoffe ihr versteht was ich meine.

    Gruß



  • basic_istream



  • schau doch einfach von std::getline ab

    template<class _Elem,
    	class _Traits,
    	class _Alloc> inline
    	basic_istream<_Elem, _Traits>& __CLRCALL_OR_CDECL getline(
    		basic_istream<_Elem, _Traits>& _Istr,
    		basic_string<_Elem, _Traits, _Alloc>& _Str,
    		const _Elem _Delim)
    	{
    


  • // main.cpp
    
    #include <iostream>
    #include <fstream>
    
    template<class _Elem, class _Traits>
    void doSomething(const std::basic_istream<_Elem, _Traits>& stream)
    {
    	...
    }
    
    int main(int argc, char* argv)
    {
    
    	std::fstream myFile(...);
    
    	doSomething(std::cin);
    	doSomething(myFile);
    
    	return 0;
    }
    

    ungetestet



  • [quote="_tarzzzzaan"]

    //auch ungetestet
    
    #include <iostream>
    #include <fstream>
    using namespace std;
    
    void doSomething(istream& in)
    {
       int x;
       in>>x;
       cout<<"habe "<<x<<" gelesen\n";
    }
    
    int main(int argc, char* argv)
    {
    
    	ifstream myFile("test.txt");
    	doSomething(cin);
    	doSomething(myFile);
    	return 0;
    }
    


  • // foo.hpp
    
    #include <iosfwd> // ist fixer als iostream, fstream brauchst du ueberhaupt nicht
    
    void read( std::istream& in );
    
    // foo.cpp
    
    #include <iostream>
    
    using std::istream;
    
    void read( istream& in )
    {
      // ...
    }
    


  • n1 optimierungen 🙂
    ihr solltet mal bücher schreiben ;p


Anmelden zum Antworten