2016-12-01 45 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发布之后;那么这将是一个很好的问题。 –