到现在为止,C++ 仍然是计算机编程领域的经典语言之一,C++ 17 标准在2017上半年已经探讨确定。本期我们汇集了编程专家——祁宇(《深入应用 C++ 11》作者,C++ 开源社区 purecpp.org 创始人)的多年心得小结,并具体介绍了 C++ 17 最新标准中值得开发者关注的新特点和基本用法。
文/祁宇
本文将借助分析 magic _ get 源码来介绍 magic _ get 实现的关键科技,深入剖析实现 pod 类型反射的机理。
反射是一种根据元数据来获得类外部信息的模式,通过元数据就可以获得对象的字段和技巧等信息。C# 和 Java 的反射模式都是通过获得对象的元数据来推动的。反射可以用于依赖注入、ORM 对象-实体映射、序列化和反序列化等与对象原本信息密切相关的领域。比如 Java 的 Spring 框架,其依赖注入的基础是构建在反射的基础之上的,可以按照元数据获取类型的信息并动态建立对象。ORM 对象-实体之间的映射也是借助反射实现的。Java 和 C# 都是基于前面运行时的语言,中间运行时提供了反射模式,所以反射针对运行时语言来说很容易,但是针对没有中间运行时的语言,要想实现反射是很困难的。
在2016年的 CppCon 技术大会上,Antony Polukhin 做了一个关于 C++ 反射的发言vc6.0怎么写c语言,他强调了一个实现反射的新思路,即无需使用宏、标记和额外的软件就能推动反射。