type_info和typeid

来源:互联网 发布:mac os 10.8 iso镜像 编辑:程序博客网 时间:2024/06/06 09:42

type_info提供了name、before等方法,可惜你却无法使用它。因为它的构造函数私有化。

typeid返回一个type_info,可惜你却无法保存它。

你只能使用:

    cout<<(typeid(A) == typeid(B))<<endl;
    type_info    t(
int);
    cout
<<t.name()<<endl;
    
class    A{};
    
class    B    :public A{};
    TypeInfo    info    
= typeid(B*);
    A
*    p = new A;
    cout
<<(typeid(p) == info)<<endl;
    delete    p;

    cout
<<"pointer:"<<TypeTraits< A* >::isPointer<<endl;

    MyData
*    pdata    = new MyData;

    cout
<<(typeid(*pdata) == typeid(MyData))<<endl;
    delete    pdata;

    MyData    data;
    cout
<<(typeid(data) == typeid(MyData))<<endl;
    
class SData    :public MyData{};
    cout
<<(typeid(SData) == typeid(MyData))<<endl;
    
const type_info*    p    = &(typeid(int));
    cout
<<p->name()<<endl;

对于一个如此好用的东西无法保存无法创建太可惜了,而且loki后面也要用这个东西,所以loki提供了这样一个包装类,你可以创建、赋值、拷贝,可以使用before也提供name功能,还提供全部比较动作。

ps
before:

    cout<<(typeid(int).before(typeid(float)))<<endl;    //true
    cout
<<(typeid(float).before(typeid(int)))<<endl;    //false