星期六, 八月 15, 2009

wxWidgets RTTI 使用

为了让使用类新Java class.forName,动态载入class的方法,计划用指定class 名字,
然后再c++中载入该类.经过研究,发现wxWidgets支持RTTI。

首先需要在编译选项中加入wxUSE_EXTENDED_RTTI选项,
然后使用类似下面的方法:
#ifndef AIBASE_H
#define AIBASE_H

#include
#include

class AIBase:public wxObject,public wxThread
{

public:
AIBase();
~AIBase();
virtual void *Entry();//logic code in here
virtual void OnExit();
protected:
private:
DECLARE_DYNAMIC_CLASS(AIBase);
};

#endif // AIBASE_H

注意类必须继承来自wxObject,而且必须加入public的修饰符。

否则继承自AIBase的子类会出现,
is an inaccessible base of 'wxObject'

注意:
DECLARE_DYNAMIC_CLASS用来class定义头文件中
IMPLEMENT_DYNAMIC_CLASS用在实现的CPP 代码文件中

可以参看:
http://wiki.wxwidgets.org/RTTI