少し奇妙に思えるかもしれませんが、初期化リストでその日を節約する例外をスローする三項を使用することがよくあります(したがって、サウンドコンストラクターの作成に役立ち、RAIIに役立ちます...)。たとえば、引数a
がsmart_ptr<>
非必要な場合nullptr
、次のようなメンバーを開始できます
member(a ? a->get_something() : throw exception())
これは有効で、合法で安全な使用法だと思います (そうでない場合は教えてください)。
最近、boost::exception に切り替えましたが、残念ながらcondition ? ret_value : BOOST_THROW_EXCEPTION(exception())
コンパイルされません (コンパイラは and を具体化できないためtypeof(ret_value)
) void
。
まったく新しいプライベート静的メソッドを作成してif
内部に配置するよりも優れた回避策はありますか?