对于自定义的类型,支持C++17的结构化绑定需求,这里主要考虑的是自定义类型的私有成员,如何绑定到外部:
来看一下如何将这三个属性绑定到结构化语句中。
首先,类的私有成员是无法在外部直接获取的,结构化也不例外,那么,这个时候需要编写一些函数来支持获取内部的成员属性:
结构化绑定时,将直接使用这些函数进行获取。
在做好准备后,我们需要编写接口,因为结构化绑定隐式使用的stl接口来绑定的。
首先特化第一个接口:
这个接口,表示我们要绑定的类型具有几个属性,注意,这是特化的类型,所以名字不能写错。
然后编写第二个接口特化:
这里因为我们所有的类型都是int类型,所以只需要一个偏特化就可以了,如果有其他的类型,这里可以全特化一下,表明第几个是什么类型。
编写第三个接口:get
至此,一个简单的形式便可以支持结构化绑定了。
测试一下:
可以看到,代码正常执行了,但是呢,存在很多的局限性。比如结构化绑定到const对象时无效,因为这里并没有编写const版本的Getx系列的函数。
支持const绑定:
首先编写const获取函数:
在类中添加:
然后编写基于const对象的get函数接口:
此时,对于const对象的绑定完成:
为什么要返回引用类型,这个要从结构化绑定的原理来解释,结构化绑定,在绑定时有一个e结构的变量被绑定,这个e结构的变量是&&类型,当使用引用来当返回值时,可以避免额外的复制。
可以使用引用作为返回值,也可以不适用引用来做返回值,看自己的需求。