我经常最终使用抛出异常的三元组,这可能看起来有点奇怪,但在初始化列表中节省了一天(因此有助于编写合理的构造函数,因此有助于 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内部更好的解决方法?