Explain what is reflection and how to implement reflection in Qt.
Reflection 反射
定义参见wiki
简单说,是使用类与方法的名字的字符串,调用类和方法。
在底层(如汇编),程序与数据都是以数据形式存储的,都是可读的(如果放在RAM也都是可写的),所以程序可以检查、修改自身。
理论上C其实也可以修改自身。在知道程序在内存中的地址之后,以此地址声明一个指针,然后向此指针进行二进制读写。但这就是超出语言逾期的使用方法了。
两篇关于用Qt实现反射的帖子
- Reflection on Qt
- How to dynamically instantiate a class using the class name. And this is a typical example.
使用的是QMetaType Class
例子
Ruby语言的例子
# without reflection
obj = Foo.new
obj.hello
# with reflection
class_name = "Foo"
method = :hello
obj = Kernel.const_get(class_name).new
obj.send method