2016-12-01 77 views
8

我通過結構化的綁定紙脫脂這裏http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0144r0.pdf,但我沒能得到很好的意義上的類型結構的語法允許結合。我最好的猜測是該結構必須是一個聚合類型。或者只有公共數據成員。可以構建什麼類型結構的綁定工作,

有我缺少這個任何警告?

+0

對和元組看起來很好的例子,和圖節點類型。 –

+0

@KerrekSB :)是啊,我明白了,我只是希望瞭解更多的關於這類型的結構,他們可以結合,例如,如果我有自己的結構細節。 – Curious

+0

當然。如果你不想依賴公共成員,你可以爲你的類型專門設置'std :: get'和'std :: tuple_size'。 –

回答

5

如果你不想專門std::tuple_sizestd::tuple_elementget你的類型,然後按[dcl.decomp]要求:

否則,所有E的非靜態數據成員應公開的E或相同不含糊 公共基類的E的直接成員,E不得有一個匿名聯合成員,並在 標識符列表元素的數目應等於的E非靜態數據成員的數量。

所以基本上所有的數據成員需要在同一個類中聲明,他們都必須是公開的,你需要提供相同數量的名字,因爲有成員。

+0

也許這是gcc/clang bug /缺少正確的實現,但是這兩個編譯器都需要從結構體複製 - 我的意思是複製構造函數。你能評論這個嗎?如果您認爲有必要對此Q/A進行論述,我可以問這是一個問題嗎? – PiotrNycz

+0

@PiotrNycz:我建議你等到C++ 17發佈之後;那麼這將是一個很好的問題。 –