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

时间:2017-08-18 19:27:47

标签: c++ c++17

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

using InstancesOfOneObject = std::tuple<DrawCmd, std::deque<bool>, std::deque<glm::mat4>>;
std::deque<InstancesOfOneObject> mInstancesByObject;

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

for (const auto &[cmd, validites, matrices] : mInstancesByObject)

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

for (const auto &instance : mInstancesByObject) {
    const auto &[cmd, validities, matrices] = instance;

效果很好。

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

1 个答案:

答案 0 :(得分:8)

唯一区别:

for (const auto &[cmd, validites, matrices] : mInstancesByObject) { ... }

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

后者允许您仍然访问instance,而在前者中它是一个未命名的对象。它们在其他方面相同。如果前者没有编译,你应该为该编译器提交一个bug。