之前被一些脚本语言惯怀了,重新写C++代码居然有点不适应。最明显的是C++没有语言层面的反射机制。回想QT是有反射的,但人家是牛X到自己实现了一个moc层,从根本上解决了这个问题。而我只是想实现一个轻量化的解决方案,最好能马上上手用,最好是类似修饰类一样的东西,可以和现有代码兼容。网上搜了下,发现没有一个我喜欢的方案。但是受他们的启发,自己实现了一个。
思路是这样滴,我想要这样敲代码ReflectionClass *ptr = ObjectFactory::createObject("ReflectionClass");
ObjectFactory怎么知道如何创建ReflectionClass呢?自然是需要给ObjectFactory一个注册函数,我可以定义一个全局的hash容器,来装每个类对应的创建函数。每个类在定义好之后,自己把自己的创建函数注册进去。这样就万事大吉啦。
进一步想到,一般需要在main函数执行之前,把所有类注册完毕。我定义一个小的注册类模板,在它的构造函数里进行注册,每个类定义好之后,再定义一个相应的全局变量,这样注册函数就能先于main函数运行了。
最后,把这些过程写成宏,调用的时候就能一句话完成上述全部的工作。
说的太复杂了,还是直接看代码简单一些。
#ifndef _REFLECTION_
#