假设您需要调用以下方法:
std::tuple<int, int, int> foo();
在 C++17 中,您可以在一行中调用该函数并将元组解包:
auto [a, b, c] = foo();
现在,我怎样才能继续只存储 b
和 c
并丢弃 a
?
目前,我只知道两个选项:
1 - 我可以在自动解包时使用虚拟变量
但是,虚拟变量将未被使用,它会发出警告,所以如果我想忽略该警告,代码将非常难看:
#pragma warning(push)
#pragma warning(disable:4101)
// ReSharper disable once CppDeclaratorNeverUsed
auto [_, b, c] = foo();
#pragma warning(pop)
2 - 我可以存储整个元组并使用 std::get
来检索对我需要的唯一变量的引用。代码不那么令人不快,但语法也不那么简单。
此外,对于我们希望保留在元组中的每个新值,此代码的大小都会增加一行。
auto tuple = foo();
int b = std::get<1>(tuple);
int c = std::get<2>(tuple);
是否有另一种更直接的方法可以仅解压缩元组中的某些参数?
原文由 Antoine C. 发布,翻译遵循 CC BY-SA 4.0 许可协议
另一种选择是使用
std::tie
:编辑
如评论中所述,这种方法存在一些问题: