这个基本就是ACDK最精华的地方了吧。C++本身的元信息很少,借助RTTI可以在运行期识别对象类型,而模板也仅仅是在编译期依靠模板元达到目的。
ACDK本身就是基于元信息:一个支持挖掘类层次结构,字段,构造,方法的高级版本的RTTI。对应与java和.net的反射机制。
元信息可以用来提供垃圾回收、动态加载类,序列化,附加用户自定义属性,运行期动态访问对象的各个方面信息。我的理解Metainfo就是对类本身的一种解析,对编程语言的一种开放式扩展。
元信息(Metainfo)==反射(Reflection)
编程语言中的元信息就是在编程语言中存在一种运行期编程语言的类型的内部构造信息。
很多解释型语言依赖元信息来构造复合类型,象lisp和perl。这些语言中最重要的就是元信息或者反射机制,也存在于java和.net中。
当然很多编译器只有有限的元信息机制,象C++的RTTI。你可以发现,你能够通过typeinfo获取类的名字,仅此而已,无法获得方法,成员,参数等等。当然com技术部分实现了metainfo,方法,成员,参数这些都可以从类型库中获取,但是仍然无法获取内部构造信息。
由于C++类型系统的复杂性,它本身没有实现反射机制。近年来最重要的两种语言java和C#实现了反射机制,这两种语言的类型系统要简单很多,他们都抛弃了C++中晦涩的部分,这是非常好的做法,我觉得C++程序员的大部分时间都花在这些事情上。
使用ACDK的元信息
元信息级别
1、无元信息
假如仅仅利用ACDK框架构造类,无需脚本调用,动态加载,类中可以不添加元信息
 ACDK_DECL_CLASS(MyClass);
ACDK_DECL_CLASS(MyClass);
 class MyClass : extends acdk::lang::Object, implements acdk::lang::Comparable
class MyClass : extends acdk::lang::Object, implements acdk::lang::Comparable


 {
{
 private:
private:
 RString _myString;
    RString _myString;
 public:
public:

 MyClass() : _myString("hello")
    MyClass() : _myString("hello")  {}
{}
 int compareTo(IN(RObject) other)
    int compareTo(IN(RObject) other)

 
     {
{
 return 0;    // always equal
        return 0;    // always equal
 }
    }

 int foo()
    int foo()  { return _myString->length(); }
{ return _myString->length(); }
 };
};
 // using it
// using it
 RMyClass myClass = new MyClass();
RMyClass myClass = new MyClass();
类本身没有引用计数,引用计数依靠的是垃圾回收机制,这样的类是不符合脚本语言使用的。
2、基本的元信息
类派生结构
实现了ClassLoader功能
3、扩展的元信息
反射
序列化
脚本调用
4、动态方法调用代理
允许脚本语言使用C++接口
C++类派生,虚方法重写
实现了元信息的ACDK类可以通过名字来定位并加载。
原来.net中类型的属性信息就是可以用来实现AOP的咚咚????妈的,就tmd扯概念啊。搞得我现在才弄明白这个概念。
	
posted on 2007-12-26 12:00 
万连文 阅读(705) 
评论(0)  编辑 收藏 引用  所属分类: 
ACDK