我经常最终使用抛出异常的三元组,这可能看起来有点奇怪,但在初始化列表中节省了一天(因此有助于编写合理的构造函数,因此有助于 RAII,...)。例如,如果参数a
是smart_ptr<>
我们想要的 non nullptr
,那么我可以发起一个类似的成员
member(a ? a->get_something() : throw exception())
我认为这是一种有效、合法和安全的使用方式(如果不是这样,请告诉我)。
我最近切换到 boost::exception,不幸condition ? ret_value : BOOST_THROW_EXCEPTION(exception())
的是没有编译(因为编译器无法 reify typeof(ret_value)
and void
)。
有没有比创建一个全新的私有静态方法并放入if
内部更好的解决方法?