假设您需要调用以下方法:
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);
有没有另一种更直接的方法来解包元组中的某些参数?
[[maybe_unused]]
来消除它。 - Baum mit Augenstd::tie
和std::ignore
。 - Holt[[maybe_unused]]
应用于结构化绑定声明,Clang和GCC也支持此功能。如果整个声明中的至少一个结构绑定已使用,则Clang和GCC还会抑制“未使用”的警告 - 我将在ReSharper C++中实现相同的逻辑(RSCPP-22313)。我认为MSVC应该支持这两种机制,可能值得向他们提出请求。 - Igor Akhmetov