Ich habe eine Klasse mit einer Methode, die einige Prüfungen auf einige Variablen durchführt und einen Wert zurückgibt und schließlich eine Warnmeldung ausgibt. Da die Methode keine Klassenvariable ändert, habe ich sie als const definiert. Um jedoch die Ausgabe nicht zu überfluten, möchte ich den Warndruck nach wenigen (oder nur einem) Ausdrucken unterdrücken. Ich war nicht in der Lage, eine Lösung zu finden, die die Methode konstant hält, ist das möglich (einfach)?Meldungen unterdrücken, die von einer Konst-Methode drucken
Antwort
Wie wäre es mit mutable
Zähler? Ich denke, es sollte akzeptabel sein, da es sich nicht um einen Objektzustand handelt, sondern um einen internen logischen Zustand.
So etwas wie diese
class Printer
{
public:
Printer() : counter(0) {}
void output() const
{
if (counter++ < max_warnings)
{
std::cout << "Something special" << std::endl;
}
}
private:
static const size_t max_warnings = 5;
mutable size_t counter;
};
Da es viele Kommentare über Multithreading Beispiel mit atomaren Zählern sind
class Printer
{
public:
Printer() : counter(0) {}
void output() const
{
if (counter++ < max_warnings)
{
std::cout << "Something special" << std::endl;
}
}
private:
static const size_t max_warnings = 5;
mutable std::atomic<size_t> counter;
};
+1 Aber Sie sollten sicherstellen, dass Sie nicht auf Probleme mit Multi-Threading stoßen. Wenn eine Methode mit "const" gekennzeichnet ist, erwarten Benutzer normalerweise, dass sie MT-sicher ist. Daher sollten Sie stattdessen einen Atomzähler in Betracht ziehen. –
@DanielFrey Sie haben Recht, aber ich denke, dass es für dieses Beispiel Übermaß ist. – ForEveR
@DanielFrey für einen Fehlerunterdrücker Ich könnte eine kleine Race-Bedingung zugeben, aber natürlich in heiklen Situationen sollte man auch Atomizität hinzufügen. – DarioP
können Sie (zum Aufkleben Zähler Beispiel von forever)
- werfen
const
weg überconst_cast<int>(counter)
- eine Variable als Zähler verwendet werden, die nicht in diesem Objekt
Die Lösung eigentliche Problem auf Sie hängt, würden Sie ein Code-Snippet auf die Frage hinzufügen?
Ich würde eine const_cast von Entwurf vermeiden und der Zähler sollte im Objekt bleiben, da jede Instanz ihren spezifischen Zähler haben sollte. Ich denke, veränderbar passt sehr gut zu diesem Fall. Für ein Code-Snippet siehe ForEveR's Antwort, er hat genau den Punkt. – DarioP
@DarioP: Ich sehe, deshalb habe ich nach einem Code-Snippet gefragt :) aber der Fragetitel lässt dies offen, so dass mein Vorschlag eine Option für andere sein könnte.Und das Wort _suppress messages_ schien mir so, als würdest du gegen eine Compiler-Warnung kämpfen ... – Wolf
... also habe ich eine Änderung an deiner Frage vorgenommen, die möglicherweise noch nicht genehmigt wurde. – Wolf
- 1. unterdrücken Drucken jeder Zuordnung
- 2. Unterdrücken stdout/stderr Drucken von Python-Funktionen
- 3. Unterdrücken von Text beim Drucken in LaTeX
- 4. Jquery-Meldungen für mehrere Meldungen
- 5. OrientDB 2.2.2 - Gibt es eine Möglichkeit, OAbstractProfiler $ MemoryChecker-Meldungen zu unterdrücken?
- 6. Anzeigen von Meldungen/Fehlern - Formularvalidierung
- 7. Unterdrücken von PDO-Warnungen
- 8. C# - Erfassen von Windows-Meldungen aus einer bestimmten Anwendung
- 9. Unterdrücken Sie die Ausgabe von Drittanbieter-Bibliothekskonsolen?
- 10. Auto die Flash-Meldungen in Schienen ausblenden
- 11. Unterdrücken von Doxygen-Warnungen
- 12. Drucken einer Reihe von JPanels
- 13. F # Unterdrücken von Warnungen
- 14. Unterdrücken von SBT Räumungswarnungen
- 15. So unterdrücken Sie die Ausgabe
- 16. Drucken einer Liste von Objekten
- 17. Drucken einer Liste von Listen
- 18. Unterdrücken der Ausgabe von Basisklassenkonstruktor
- 19. Unterdrücken Warnung Ausgabe von Nütet.exe
- 20. Unterdrücken der Ausgabe in R
- 21. Unterdrücken von Microsoft Fakes Warnungen
- 22. Ergebnisse von generiertem Code unterdrücken
- 23. Drucken Sie die letzte Zeile aus einer Liste von Datenrahmen
- 24. Unterdrücken von Doppelklick mit Script.aculo.us
- 25. Unterdrücken der Ausgabe von gc()
- 26. Nur die letzte Zeile einer Datei drucken?
- 27. JS Objektelemente, die auf einer Webseite drucken
- 28. PushBots Meldungen direkt vom Server
- 29. Drucken einer Matrix ohne Zeilen- und Spaltenindizes
- 30. Unterdrücken Sie jede Emission einer bestimmten Warnmeldung
Sie können den lokalen Zähler in Ihrer Funktion als statische Variable definieren. –