Nebula2探秘05-RTTI

2007-05-08     推荐:8888606    收藏:5751145    评论:0     来源:e800开发者频道

Nebula2探秘05-RTTI

happykevins文

Nebula2的RTTI支持都是在nObject这一层实现的,每个继承自nObject的类都有IsA()和IsInstanceof()两个方法,前者用于判断继承关系,后者则用于判断一个对象是否为指定类的实例,下面的代码说明了他们的用法。

/****************************************************************************/
/* Nebula2 - Tutorial 05 */
/* Nebula2 RTTI */
/* author: happykevins */
/****************************************************************************/

///----------------------------------------------------------------------------
/// +必要头文件
#include kernel/nkernelserver.h
#include
kernel/ntimeserver.h
#include
kernel/nfileserver2.h
/// -必要头文件
///----------------------------------------------------------------------------

///----------------------------------------------------------------------------
/// +链接库
#pragma comment(lib, ”wsock32.lib”)
#pragma comment(lib, ”d_nkernel.lib”)
/// -链接库
///----------------------------------------------------------------------------

///----------------------------------------------------------------------------
/// +Application
int main(int argc, const char** argv)
{
/// 创建KernelServer
nKernelServer* ks = n_new(nKernelServer);

///----------------------------------------------------------------------------
/// +Nebula2 RTTI Test
/// @note:
/// Nebula2 RTTI implement mostly depends on nClass && nObject

/// firstly: we got some instance (all inherited from nObject)
nRoot* nroot = (nRoot*)ks->New(nroot);
nObject
* nobject = (nObject*)ks->New(nobject);
nTimeServer
* ntimeserver = (nTimeServer*)ks->Lookup(/sys/servers/time);
nFileServer2
* nfileserver2 = (nFileServer2*)ks->Lookup(/sys/servers/file2);

/// secondly: Test RTTI Info.
/// use ''IsA'' & ''IsInstanceOf'' methods

// 1. nroot is a nroot?
n_printf([%s] is %s [%s] ,
nroot
->GetClass()->GetName(),
nroot
->IsA(nroot) ? \b : not,
nroot);
// 2. nroot is a nobject?
n_printf([%s] is %s [%s] ,
nroot
->GetClass()->GetName(),
nroot
->IsA(ks->FindClass(nobject)) ? \b : not,
nobject);
// 3. nobject is a nroot?
n_printf([%s] is %s [%s] ,
nobject
->GetClass()->GetName(),
nobject
->IsA(nroot) ? \b : not,
nroot);
// 4. ntimerserver is a nroot?
n_printf([%s] is %s [%s] ,
ntimeserver
->GetClass()->GetName(),
ntimeserver
->IsA(nroot) ? \b : not,
nroot);
// 5. nroot is instance of nroot?
n_printf([%s] is %s instance of [%s] ,
nroot
->GetClass()->GetName(),
nroot
->IsInstanceOf(ks->FindClass(nroot)) ? \b : not,
nroot);
// 6. nroot is instance of nobject?
n_printf([%s] is %s instance of [%s] ,
nroot
->GetClass()->GetName(),
nroot
->IsInstanceOf(ks->FindClass(nobject)) ? \b : not,
nobject);
// 7. nfileserver2 is a nobject?
n_printf([%s] is %s [%s] ,
nfileserver2
->GetClass()->GetName(),
nfileserver2
->IsA(nobject) ? \b : not,
nobject);
// 8. nfileserver2 is a ntimeserver?
n_printf([%s] is %s [%s] ,
nfileserver2
->GetClass()->GetName(),
nfileserver2
->IsA(ntimeserver) ? \b : not,
ntimeserver);

/// +Nebula2 RTTI Test
///----------------------------------------------------------------------------


/// 销毁KernelServer
n_delete(ks);

getchar();
return 0;
}
/// -Application
///----------------------------------------------------------------------------

您可以针对本文进行:[评论]  [收藏]  [推荐]   [查看原文链接]  
  • 共有0条评论  点击查看更多评论
  • 网友评论仅供网友表达个人看法,并不表明e800同意其观点或证实其描述
我想发表评论:
用户名密码
  • 匿名发表
    验证码: