今天由于项目的需要,所以在尝试模拟实现C++的反射机制。其实比较简单,就是类似于MFC那样的机制,用一些宏定义使得类能够通过类名来创建。当然由于实际需求使用了全局map类。
由于之前对宏的使用不是很熟悉,今天在把侯捷的《深入浅出MFC》翻看了一下,重点看来RTTI那一张。利用宏将这些机制模拟了出来,但是在测试的时候,发现MyRuntimeClass.stype输出总是为null,stype是MyRuntimeClass的一个成员变量,是一个string类型的数据。由于当时对宏还不是很熟悉,所以一直怀疑自己是不是在哪个地方出现了问题,一直没有想过是因为混用了C和C++的问题。我的输出测试语句是:
printf("%s\n",CMyObject::CMyObjectName.stype);
各种测试,甚至让我怀疑类的static变量的初始化方法。最后花费了很大的时间才总算知道是因为printf是C语言的方法,不知道string这个类的解析方式,所以输出的结果是null,如果将代码的输出方式改为:
printf("%s\n",CMyObject::CMyObjectName.stype.c_str());
则会出现想要的结果。
感慨一下自己的粗心,同时感叹一下MFC框架其实本身还是很牛逼的,宏定义用的相当娴熟,侯捷先生的这本书看来还要再好好看看啊。