2017-08-18 8 views
0

の両端キューをループ私はただのVisual Studioの最新バージョンをインストールし、私はタプルのこの両端キューを持っている:構造化バインディング:タプル

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

私はあったforループで、この両端キューを通過する場合、後:

うまく機能

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){ //最初と2番目を使用}を試してください。 range-for)documentation – Bl4ckb0ne

+0

それはうまくいくようです。しかし、ここで右辺参照を使うのは変です。私は詳細を詳細に見ていきます; –

答えて

8

の唯一の違い:

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

と:

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

は、後者は、あなたがまだそれは無名のオブジェクトの元に一方instanceにアクセスすることを可能にするということです。彼らはそれ以外は同等です。前者がコンパイルされない場合は、そのコンパイラにバグを報告する必要があります。

関連する問題