In meinem Programm möchte ich Behauptungen verwenden, die eine Fehlermeldung anzeigen. Neben den bekannten Abhilfen für C und C++ gibt es die „echte“ Lösung als BOOST bietet BOOST_ASSERT_MSG(expr, msg)
(siehe auch assert() with message)Mit dynamischer Nachricht bestätigen?
Aber eine statische Meldung ist nicht genug für mich, ich will auch mal zeigen, die ausgefallenen Variablen, z.B in einem Fall wie
BOOST_ASSERT_MSG(length >= 0, "No positive length found! It is " << length)
Wie Sie sehen, ich möchte die Meldung „String“ zu formatieren als stringstream
oder ostream
wie das erlauben würde mir benutzerdefinierte Typen zeigen leicht an (vorausgesetzt, dass ich die relevant definiert haben Formatierungsfunktion).
Das Problem hierbei ist, dass BOOST_ASSERT_MSG
ist standardmäßig ein char const *
erfordert das ist so nicht kompatibel.
Gibt es eine Möglichkeit, assertion_failed_msg()
auf eine solche Weise neu zu definieren/zu überlasten, dass die Verwendung eines Streams als Nachricht funktioniert? Wie?
(Mein naiver Ansatz gescheitert wie der Compiler zunächst ein operator<<("foo",bar)
auf der Nachricht selbst tun ... wollte)
ist Warum 'while (0)'? – WiSaGaN
Bitte lesen Sie http://stackoverflow.com/questions/1067226/c-multi-line-macro-do-while0-vs-scope-block – Greg
Wenn Sie 'while (0)' verwenden, lassen Sie das ';' weg. –