2017-08-18 41 views
0

的雙端隊列我剛安裝了Visual Studio的最後一個版本,我有此雙端元組:結構綁定:遍歷元組

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; 

效果很好。

這是正常的嗎?有沒有辦法使用接近第一個想法的東西?

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

和:

+0

是的,但爲什麼對於std :: map它是否工作...它應該是同樣的問題,不是嗎? –

+1

從[range-for](http://en.cppreference.com/w/cpp/language/)試試這個'for(auto && [first,second]:mymap){ //使用第一個和第二個 }範圍)爲文檔 – Bl4ckb0ne

+0

好吧,似乎工作。但在這裏使用右值引用很奇怪。我將更詳細地看文檔,謝謝;) –

回答

8

之間的唯一區別

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

在於,後者可以讓你仍然可以訪問instance而在前它是一個未命名的對象。它們是等價的。如果前者不能編譯,你應該用該編譯器提交一個bug。