C++绝对值怎么表示
1、一、pod 类型编译期反射
反射是一种根据元数据来获取类内部信息的机制,通过元数据就可以获取对象的字段和方法等信息。C# 和 Java 的反射机制都是通过获取对象的元数据来实现的。

2、二、根据所提供的反射机制进行操作
Java 和 C# 都是基于中间运行时的语言,中间运行时提供了反射机制,所以反射对于运行时语言来说很容易,但是对于没有中间运行时的语言,要想实现反射是很困难的。

3、三、关键是操作的技术
实现 pod 类型反射的思路是这样的:先将 pod 类型转换为对应的 tuple 类型,接下来将 pod 类型的值赋给 tuple,然后就可以通过索引去访问 tuple 中的元素了。

4、四、关键是把pod键换pod键
所以实现 pod 反射的关键就是如何将 pod 类型转换为对应的 tuple 类型和 pod 值赋值给 tuple。

5、五、当pod 类型转换为 tuple 类型时
pod 类型对应的 tuple 类型是什么样的呢?以上面的 foo 为例,foo 对应的 tuple 应该是 tuple<int, char>,即 tuple 中的元素类型和顺序和 pod 类型中的字段完全一一对应。

6、六、根据结构体生成一个 tuple 的基本思路
按顺序将结构体中每个字段的类型萃取出来并保存起来,后面再取出来生成对应的 tuple 类型。C++ 也没有一个能直接保存不同类型的容器,因此需要用一个间接的方法来保存萃取出来的字段类型。

7、七、解决的一个问题是如何实现类型和 id 的相互转换。
type 和 id 在编译期相互转换先借助一个空的模版类用来保存实际的类型,再借助 C++ 14 的 constexpr 特性,在编译期返回某个类型对应的编译期 id,就可以实现 type 转换为 id 了。

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
阅读量:27
阅读量:112
阅读量:102
阅读量:175
阅读量:102