Qt Reflection

Explain what is reflection and how to implement reflection in Qt.

Reflection 反射

定义参见wiki

简单说,是使用类与方法的名字的字符串,调用类和方法。

在底层(如汇编),程序与数据都是以数据形式存储的,都是可读的(如果放在RAM也都是可写的),所以程序可以检查、修改自身。

理论上C其实也可以修改自身。在知道程序在内存中的地址之后,以此地址声明一个指针,然后向此指针进行二进制读写。但这就是超出语言逾期的使用方法了。

两篇关于用Qt实现反射的帖子

使用的是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