cout Ausgaben in txt Datei schreiben



  • ist zwar schon etwas her, aber da immer mal wieder auf den thread hier verlinkt wird, denke ich, ists gar nicht so doof, hier weiterzumachen^^

    ich bin heute mal in die verlegenheit gekommen, so eine weiche zu brauchen und hab versucht, den code hier zu verstehen und zu benutzen...
    ich denke, ich hab verstanden, wie er funktioniert - allerdings wird die fkt. overflow gar nicht erst aufgerufen 😕
    compilier-bares minimal-bsp.:

    #include <iostream>
    #include <streambuf>
    
    template<
    	typename C,
    	typename T = std::char_traits<C>
    >
    class duplexer : public std::basic_streambuf<C, T>
    {
    public:
    	typedef std::basic_streambuf<C, T> base_type;
    	typedef typename base_type::traits_type traits_type;
    
    	duplexer(std::basic_ostream<char_type, traits_type>& source, std::basic_ostream<char_type, traits_type>& duplicate)
    	:	streambuf_one(source.rdbuf()),
    		streambuf_two(duplicate.rdbuf()),
    		output(source)
    	{
    		source.rdbuf(this);
    	}
    
    	~duplexer()
    	{
    		output.rdbuf(streambuf_one);
    	}
    
    protected:
    	virtual int_type overflow(int_type c = traits_type::eof())
    	{
    		if(!streambuf_one || !streambuf_two)
    			return traits_type::eof();
    
    		int_type first  = streambuf_one->sputc( static_cast<char_type>(c) );
    		int_type second = streambuf_two->sputc( static_cast<char_type>(c) );
    
    		if(traits_type::eq_int_type(first, traits_type::eof()) || traits_type::eq_int_type(second, traits_type::eof()))
    			return traits_type::eof();
    
    		return traits_type::not_eof(c);
    	}
    
    private:
    	duplexer(const duplexer&);
    	duplexer& operator= (const duplexer&);
    
    	base_type* streambuf_one;
    	base_type* streambuf_two;
    
    	std::basic_ostream<char_type, traits_type>& output;
    };
    
    int main()
    {
    	duplexer<char>(std::cout, std::clog);
    
    	std::cout << "asd";
    
    	std::cin.get();
    }
    

    ich hab cout und clog genommen, damit man direkt sieht, ob es geklappt hat oder nicht...

    bb



  • ich trottel - dachte, da werner z.bsp. den rückgabetyp vergessen hatte, dass er vll noch nen flüchtigkeitsfehler gemacht hätte - dabei hab ich beim anwenden nen fehler gemacht xD
    main-fkt muss nat. so aussehen:

    int main()
    {
    	duplexer<char> duplex(std::cout, std::clog);
    
    	std::cout << "asd";
    
    	std::cin.get();
    }
    


  • Hallo,

    ich versuche schon seit einiger Zeit den Code zu verstehen. Leider ohne Erfolg.
    Kann mir jemand dabei helfen?

    MfG Pierre



  • PierreOne schrieb:

    Kann mir jemand dabei helfen?

    Ja! 😉


Anmelden zum Antworten