rtti02.c
来自「开放源码的编译器open watcom 1.6.0版的源代码」· C语言 代码 · 共 71 行
C
71 行
#include "fail.h"
#ifdef __WATCOM_RTTI__
#define hier( x ) \
struct V_U##x { \
virtual void __u(){}; \
}; \
struct V_O##x { \
virtual void __u(){}; \
}; \
struct V_I##x { \
virtual void __u(){}; \
}; \
struct B_U##x { \
virtual void __u(){}; \
}; \
struct B_O##x { \
virtual void __u(){}; \
}; \
struct B_I##x { \
virtual void __u(){}; \
}; \
struct X##x : \
public virtual V_U##x, \
private virtual V_I##x, \
protected virtual V_O##x, \
public B_U##x, \
private B_I##x, \
protected B_O##x \
{ \
int _x[10]; \
}; \
struct Y##x : \
public virtual V_U##x, \
private virtual V_I##x, \
protected virtual V_O##x, \
public B_U##x, \
private B_I##x, \
protected B_O##x \
{ \
int y[10]; \
}; \
struct Z##x : X##x, private Y##x { \
int z[10]; \
};
hier( 0 )
hier( 1 )
void check_z( void *p, unsigned line ) {
if( p ) fail(line);
}
void check_nz( void *p, unsigned line ) {
if( !p ) fail(line);
}
int main() {
B_U0 *p = (X0*) new Z0;
check_z( dynamic_cast< V_U1 * >( p ), __LINE__ );
check_nz( dynamic_cast< V_U0 * >( p ), __LINE__ );
_PASS;
}
#else
ALWAYS_PASS
#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?