C++中如何重用变量实现元组/Pair的单行多次解包?
可行的实现方式
要实现多次调用函数并重用validity和table变量,你可以采用以下两种方案:
方案一:显式声明变量类型 + std::tie赋值
先根据isFieldPresentAndSet返回的tuple元素类型,提前声明两个变量,再用std::tie将函数返回的tuple值绑定到变量上,后续调用直接复用该写法即可:
// 替换成函数返回tuple对应的实际类型 bool validity; YourTableType table; // 第一次调用赋值 std::tie(validity, table) = isFieldPresentAndSet(r, "is_federated"); // 第二次复用变量赋值 std::tie(validity, table) = isFieldPresentAndSet(r, "gslb_sp_enabled");
std::tie会创建包含左值引用的tuple,能直接将函数返回的tuple内容赋值给已声明的变量,完美适配变量复用需求。
方案二:用std::tuple统一存储变量
如果不想单独声明两个变量,可以用一个tuple来存储结果,后续直接赋值更新:
auto result = isFieldPresentAndSet(r, "is_federated"); // 绑定引用方便后续访问 auto& validity = std::get<0>(result); auto& table = std::get<1>(result); // 第二次调用更新整个tuple result = isFieldPresentAndSet(r, "gslb_sp_enabled"); // 此时validity和table会自动指向更新后的值
为什么你的尝试失败?
- 重复使用
auto [validity, table]属于同一作用域内重复声明同名变量,C++语法不允许,因此编译报错。 [validity, table] = ...不是合法语法,结构化绑定仅用于声明变量,不能作为赋值操作的左值。validity, table = ...是逗号表达式,只会执行table = ...的赋值,但函数返回的是tuple,与table类型不匹配,导致编译失败。
内容的提问来源于stack exchange,提问作者Mayukh Sarkar
相关产品推荐
相关产品推荐

