假设您需要调用以下方法:
std::tuple<int, int, int> foo();
在 C + + 17中,您可以调用该函数并在一行中解压元组:
auto [a, b, c] = foo();
现在,我如何继续只存储 b
和 c
并丢弃 a
?
目前,我只知道两种选择:
我可以使用一个虚拟变量时,自动解包
但是,这个虚拟变量将不会被使用,它会发出一个警告,所以如果我想让这个警告保持沉默,那么代码将非常难看:
#pragma warning(push)
#pragma warning(disable:4101)
// ReSharper disable once CppDeclaratorNeverUsed
auto [_, b, c] = foo();
#pragma warning(pop)
我可以存储整个元组,并使用 std::get
检索引用的唯一变量,我需要的。代码不那么令人讨厌,但语法也不那么简单。
此外,对于我们希望保留在元组中的每个新值,此代码的大小都会增加一行。
auto tuple = foo();
int b = std::get<1>(tuple);
int c = std::get<2>(tuple);
是否有另一种更简单的方法只解压元组中的一些参数?