cout << Variable = nichts



  • Hey Leute,
    kann ich eine Variable den "Wert" nichts zuweisen. Also wenn ich

    cout << variable;
    

    schreibe auch wirklich nichts ausgegeben wird (keine 0, sondern nichts).
    Ist soetwas möglich?

    Gruß



  • Nein



  • Du kannst eine eigene Klasse machen, mit den entsprechenden Eigenschaften.



  • #include <iostream>
    
    template<class T>
    struct MaybePrint{
    	T t;
    	bool notprint;
    	//TODO: Variadic template bauen um argumente an konstruktor von t zu übergeben
    	MaybePrint() : notprint{ false }{}
    	operator T&(){
    		return t;
    	}
    	operator const T&() const{
    		return t;
    	}
    	T &operator =(const T &other){
    		return t = other;
    	}
    };
    
    template<class T>
    std::ostream &operator <<(std::ostream &os, MaybePrint<T> &t){
    	if (t.notprint)
    		return os;
    	return os << t.t;
    }
    
    int main(){
    	MaybePrint<int> i;
    	i = 42;
    	i++;
    	std::cout << i << '\n';
    	i.notprint = true;
    	std::cout << i << '\n';
    	i *= 2;
    	i.notprint = false;
    	std::cout << i << '\n';
    }
    

    Ausgabe:

    43
    
    86
    

    Es sei aber gesagt, dass das ein fieser Hack ist. Normal würde man Variablen die man nicht ausgeben will einfach nicht ausgeben.



  • Okey danke für die Antworten 🙂
    Weil ich hatte vor ein 4 Gewinnt in der Konsole zu programmieren, - nachdem ich Tic Tac Toe nun fertig habe - und dort wollte ich halt den Vector so einstellen dass nichts ausgegeben wird. Aber so ist mir das momentan noch zu kompliziert 😃



  • Skeptar schrieb:

    Okey danke für die Antworten 🙂
    Weil ich hatte vor ein 4 Gewinnt in der Konsole zu programmieren, - nachdem ich Tic Tac Toe nun fertig habe - und dort wollte ich halt den Vector so einstellen dass nichts ausgegeben wird. Aber so ist mir das momentan noch zu kompliziert 😃

    Manche machen es mit drei Werten:
    'X' für den ersten Speiler
    'O' für den zweiten und
    ' ' (Leerzeichen) für ein leeres Feld.
    Dann muss man gar nicht "nichts" ausgeben, was die Grafik einfacher macht, finde ich.



  • volkard schrieb:

    Manche machen es mit drei Werten:
    'X' für den ersten Speiler
    'O' für den zweiten und
    ' ' (Leerzeichen) für ein leeres Feld.
    Dann muss man gar nicht "nichts" ausgeben, was die Grafik einfacher macht, finde ich.

    Danke! 😃
    Daran habe ich gar nicht mehr gedacht. Und da ich hier schon 4 gewinnt angesprochen habe, habe ich dazu nochmal eine kleine Frage.
    Wie mache ich das mit dem überprüfen?
    Genauso wie bei dem Tic Tac Toe? (jede Möglichkeit durchgehen)

    Gruß



  • Skeptar schrieb:

    volkard schrieb:

    Manche machen es mit drei Werten:
    'X' für den ersten Speiler
    'O' für den zweiten und
    ' ' (Leerzeichen) für ein leeres Feld.
    Dann muss man gar nicht "nichts" ausgeben, was die Grafik einfacher macht, finde ich.

    Danke! 😃
    Daran habe ich gar nicht mehr gedacht. Und da ich hier schon 4 gewinnt angesprochen habe, habe ich dazu nochmal eine kleine Frage.
    Wie mache ich das mit dem überprüfen?
    Genauso wie bei dem Tic Tac Toe? (jede Möglichkeit durchgehen)

    Gruß

    am einfachsten ist es bei jeder stelle wo 4 nacheinander sein können zu prüfen ob 4 nacheinander sind...



  • Skeptar schrieb:

    Wie mache ich das mit dem überprüfen?
    Genauso wie bei dem Tic Tac Toe? (jede Möglichkeit durchgehen)

    Für mich am Einfachsten, ich gehe von dem zuletzt eingeworfenen Stein in alle Richtungen und zähle jeweils, wie weit die gleiche Steinfarbe weiter vorliegt.
    if(countS(x,y)>=3) return true;//süd
    if(countW(x,y)+countO(x,y)>=3;//west plus ost
    ...



  • Okey danke 🙂
    Ich bin ja noch nicht so gut in C++ und da stellt sich die Frage:
    was ist mit countS gemeint(ich denke zum Zählen)? und (x,y)(klar es sind die Koordinaten aber was muss dort rein?)?
    Und jedzt wirklich meine letzte Frage. 😃
    Sollte ich einen 2 Demensionalen Array nehmen oder 4 Vectoren 😕 😕



  • In Bezug auf die ursprüngliche Frage: hat boost::optional vielleicht nen Passenden Stream-Insertion-Operator?



  • hustbaer schrieb:

    In Bezug auf die ursprüngliche Frage: hat boost::optional vielleicht nen Passenden Stream-Insertion-Operator?

    Ehrlich gesagt, habe ich keine Ahnung was "boost" ist. :|
    Habe ab und zu hier darüber was gelesen aber was das ist -> 😕 .
    Hast du davon eventuell einen Link?

    Gruß



  • Skeptar schrieb:

    hustbaer schrieb:

    In Bezug auf die ursprüngliche Frage: hat boost::optional vielleicht nen Passenden Stream-Insertion-Operator?

    Ehrlich gesagt, habe ich keine Ahnung was "boost" ist. :|
    Habe ab und zu hier darüber was gelesen aber was das ist -> 😕 .
    Hast du davon eventuell einen Link?

    Gruß

    das ist eine bekannte, grosse, vielseitige, moderne und kostenlose opensource-c++-bibliothek. wenn du dir sie mal anschauen möchtest: http://www.boost.org/


Anmelden zum Antworten