gpt4 book ai didi

c++ - BOOST_THROW_EXCEPTION 在初始化列表中缺少三元运算符的解决方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:57:19 27 4
gpt4 key购买 nike

我经常最终使用抛出异常的三元组,这可能看起来有点奇怪但在初始化列表中节省了一天(因此有助于编写合理的构造函数,因此有助于 RAII,...)。例如。如果参数 asmart_ptr<>我们想要非 nullptr , 然后我可以发起一个成员,比如

member(a ? a->get_something() : throw exception())

我认为这是有效、合法且安全的使用(如果不是,请告诉我)。

我最近切换到 boost::exception,不幸的是 condition ? ret_value : BOOST_THROW_EXCEPTION(exception())不编译(因为编译器无法具体化 typeof(ret_value)void )。

有没有比创建一个全新的私有(private)静态方法并放置一个 if 更好的解决方法?里面?

最佳答案

这是完全有效的 C++,但许多编译器不会将 BOOST_THROW_EXCEPTION 视为抛出表达式,而只是常规的 void 类型表达式。由于标准要求 void 类型表达式是 throw 表达式,或者两个分支都是 void 类型,因此编译器拒绝三元表达式。

典型的解决方法是使用逗号运算符:

condition ? ret_value : (BOOST_THROW_EXCEPTION(exception()), decltype(ret_value){})

当然,您可以将逗号后的部分替换为任何类型正确的表达式,并且您可以确定它不会被使用。

关于c++ - BOOST_THROW_EXCEPTION 在初始化列表中缺少三元运算符的解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16537272/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com