Stream Manipulatoren für eigene Typen



  • Kann man die Stream Manipulatoren der STL für eigene Typen anwenden?
    Beispiel: Ich habe eine Klasse, die Zahlen repräsentiert. Ausgeben tue ich diese über die STL streams:

    class zahlenklasse
    {
        friend std::ostream& operator << (std::ostream& os, const zahlenklasse& objekt);
    }
    

    Jetzt würde ich aber gerne wissen, ob zB. std::hex auf den stream angewendet wurde, damit ich die Ausgabe entsprechend ändern kann. Ist das möglich?


  • Mod

    XavierN schrieb:

    Jetzt würde ich aber gerne wissen, ob zB. std::hex auf den stream angewendet wurde, damit ich die Ausgabe entsprechend ändern kann. Ist das möglich?

    Klar. Das ist sogar genauso gedacht. Die ganzen Sachen, welche die Streams von ios_base erben, helfen dabei:

    http://www.cplusplus.com/reference/iostream/ios_base/



  • Simples Beispiel:

    #include <iostream>
    using namespace std;
    
    void check(ostream& o) {
    
    	if (o.flags() & ostream::hex)
    		cout << "hex" << endl;
    	else
    		cout << "no hex" << endl;
    
    	if (o.flags() & ostream::showbase)
    		cout << "showbase" << endl;
    	else
    		cout << "no showbase" << endl;
    
    }
    
    int main(){
    
    	check(cout);
    	cout << hex;
    	check(cout);
    	cout << showbase;
    	check(cout);
    
        return 0;
    }
    

    Ausgabe:

    no hex
    no showbase
    hex
    no showbase
    hex
    showbase
    


  • Danke Gagistandor, genau so ein Beispiel habe ich gesucht 🙂


Anmelden zum Antworten