Nebula2探秘05-RTTI

Nebula2探秘05-RTTI

happykevins文

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

/* ************************************************************************** */
/* Nebula2-Tutorial05 */
/* Nebula2RTTI */
/* 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);

/// ----------------------------------------------------------------------------
/// +Nebula2RTTITest
/// @note:
/// Nebula2RTTIimplementmostlydependsonnClass&&nObject

/// firstly:wegotsomeinstance(allinheritedfromnObject)
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:TestRTTIInfo.
/// use'IsA'&'IsInstanceOf'methods

// 1.nrootisanroot?
n_printf( " [%s]is%s[%s] " ,
nroot
-> GetClass() -> GetName(),
nroot
-> IsA( " nroot " ) ? " \b " : " not " ,
" nroot " );
// 2.nrootisanobject?
n_printf( " [%s]is%s[%s] " ,
nroot
-> GetClass() -> GetName(),
nroot
-> IsA(ks -> FindClass( " nobject " )) ? " \b " : " not " ,
" nobject " );
// 3.nobjectisanroot?
n_printf( " [%s]is%s[%s] " ,
nobject
-> GetClass() -> GetName(),
nobject
-> IsA( " nroot " ) ? " \b " : " not " ,
" nroot " );
// 4.ntimerserverisanroot?
n_printf( " [%s]is%s[%s] " ,
ntimeserver
-> GetClass() -> GetName(),
ntimeserver
-> IsA( " nroot " ) ? " \b " : " not " ,
" nroot " );
// 5.nrootisinstanceofnroot?
n_printf( " [%s]is%sinstanceof[%s] " ,
nroot
-> GetClass() -> GetName(),
nroot
-> IsInstanceOf(ks -> FindClass( " nroot " )) ? " \b " : " not " ,
" nroot " );
// 6.nrootisinstanceofnobject?
n_printf( " [%s]is%sinstanceof[%s] " ,
nroot
-> GetClass() -> GetName(),
nroot
-> IsInstanceOf(ks -> FindClass( " nobject " )) ? " \b " : " not " ,
" nobject " );
// 7.nfileserver2isanobject?
n_printf( " [%s]is%s[%s] " ,
nfileserver2
-> GetClass() -> GetName(),
nfileserver2
-> IsA( " nobject " ) ? " \b " : " not " ,
" nobject " );
// 8.nfileserver2isantimeserver?
n_printf( " [%s]is%s[%s] " ,
nfileserver2
-> GetClass() -> GetName(),
nfileserver2
-> IsA( " ntimeserver " ) ? " \b " : " not " ,
" ntimeserver " );

/// +Nebula2RTTITest
/// ----------------------------------------------------------------------------


/// 销毁KernelServer
n_delete(ks);

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

你可能感兴趣的:(RTTI)