结构化绑定:循环遍历元组的双端队列

Ant*_*ier 0 c++ c++17

我刚刚安装了最后一个版本的Visual Studio,我有这个元组的deque:

using InstancesOfOneObject = std::tuple<DrawCmd, std::deque<bool>, std::deque<glm::mat4>>;
std::deque<InstancesOfOneObject> mInstancesByObject;
Run Code Online (Sandbox Code Playgroud)

之后,我想用一个远程循环来遍历这个双端队列:

for (const auto &[cmd, validites, matrices] : mInstancesByObject)
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用,但是:

for (const auto &instance : mInstancesByObject) {
    const auto &[cmd, validities, matrices] = instance;
Run Code Online (Sandbox Code Playgroud)

效果很好.

这是正常的吗?有没有办法使用接近第一个想法的东西?

Bar*_*rry 8

唯一的区别是:

for (const auto &[cmd, validites, matrices] : mInstancesByObject) { ... }
Run Code Online (Sandbox Code Playgroud)

和:

for (const auto &instance : mInstancesByObject) {
    const auto &[cmd, validities, matrices] = instance;
    ...
}
Run Code Online (Sandbox Code Playgroud)

是后者允许你仍然访问,instance而在前者它是一个未命名的对象.它们在其他方面相同.如果前者不编译,则应该向该编译器提交错误.