C++包含返回的宏表达式(如 Rust 的尝试!
C++ macro expression containing return (like Rust's try!)
Rust 有一个宏,它是一个表达式,要么计算到某个值,要么从函数返回。有什么办法可以在C++做到这一点吗?
像这样:
struct Result
{
bool ok;
int value;
}
Result foo() { ... }
#define TRY(x) (auto& ref = (x), ref.ok ? ref.value : return -1)
int main()
{
int i = TRY(foo());
}
不幸的是,它不起作用return
因为它是一个陈述而不是一个表达式。上面的代码还有其他问题,但它大致给出了我想要的想法。有人有什么好主意吗?
多亏
了NathanOliver的链接,看起来你可以用语句表达式来做到这一点,而这些表达式显然只受Clang和GCC的支持。像这样:
#define TRY(x)
({
auto& ref = (x);
if (!ref.ok) {
return -1;
}
ref.value; // The block evaluates to the last expression.
})
相关文章:
- (C++)分析树以计算返回错误值的简单算术表达式
- 在VS2010-VS2015下编译时,如何使用decltype作为较大类型表达式的LHS
- 提升精神:解析布尔表达式并简化为规范范式
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 使用正则表达式regex_search在字符串中查找字符串
- 如何确认我的constexpr表达式实际上已经在编译时执行
- 概念中的cv限定符需要表达式参数列表
- 为什么constexpr的性能比正常表达式差
- 对于结构,表达式必须是可修改的ivalue
- 为什么在C的循环中使用printf的Rust代码不显示输出,而在C++的循环中显示std::cout
- 当一个值是非常量但用常量表达式初始化时使用constexpr
- 将fold表达式与std::一起用于两个元组
- 断言中的Fold表达式在某些计算机上编译,但在其他计算机上不编译
- 标记 '","' 之前的预期主表达式
- gcc和clang在表达式是否为常量求值的问题上存在分歧
- 如何计算具有指定类型的表达式的相对精度和绝对精度
- 带有用户定义类的c++折叠表达式
- 即使使用调试编译标志,表达式也是"optimized out"
- holeMenuProgram.cpp:38:1 错误:'}'令牌之前的预期主表达式
- C++包含返回的宏表达式(如 Rust 的尝试!