私のプログラムでは、エラー メッセージを表示するアサートを使用したいと考えています。C および C++ のよく知られた回避策とは別に、BOOST が提供する「本当の」解決策があります( assert() with messageBOOST_ASSERT_MSG( expr, msg )
も参照してください) 。
しかし、静的メッセージだけでは十分ではありません。たとえば、次のような場合に、失敗した変数を表示したい場合もあります。
BOOST_ASSERT_MSG( length >= 0, "No positive length found! It is " << length )
ご覧のとおり、メッセージ "string" をstringstream
orostream
としてフォーマットしたいと思います。これにより、カスタム タイプを簡単に表示できるようになります (関連するフォーマット関数を定義したと仮定します)。
ここでの問題BOOST_ASSERT_MSG
は、デフォルトで が必要であるchar const *
ため、互換性がないことです。
assertion_failed_msg()
ストリームをメッセージとして使用できるように再定義/オーバーロードする方法はありますか? どのように?(コンパイラが最初にメッセージ自体で
実行したかったため、私の素朴なアプローチは失敗しました...)operator<<("foo",bar)