#include
"
stdafx.h
"
class Inter
{
public:
virtual void* GetInter(int i) =0;
} ;
class In0
{
public:
virtual void P0() =0;
} ;
class In1
{
public:
virtual void P1() =0;
} ;
class Imp : public Inter, public In0, public In1
{
public:
/**
* losted type
**/
virtual void* GetInter(int i)
{
switch( i )
{
case 0 :
{
/**
* cast to In0*
**/
return (In0*)this;
}
case 1 :
{
return (In1*)this;
}
default:
break;
}
return NULL;
}
virtual void P0()
{
std::cout<<"p0...."<<std::endl;
}
virtual void P1()
{
std::cout<<"p1...."<<std::endl;
}
} ;
int _tmain( int argc, _TCHAR * argv[])
{
Inter* b = new Imp();
/**
* virtual ptr inter, in0, in1
**/
In0* in0 = (In0*)b->GetInter(0);
if ( in0 )
{
in0->P0();
}
return 0;
}
class Inter
{
public:
virtual void* GetInter(int i) =0;
} ;
class In0
{
public:
virtual void P0() =0;
} ;
class In1
{
public:
virtual void P1() =0;
} ;
class Imp : public Inter, public In0, public In1
{
public:
/**
* losted type
**/
virtual void* GetInter(int i)
{
switch( i )
{
case 0 :
{
/**
* cast to In0*
**/
return (In0*)this;
}
case 1 :
{
return (In1*)this;
}
default:
break;
}
return NULL;
}
virtual void P0()
{
std::cout<<"p0...."<<std::endl;
}
virtual void P1()
{
std::cout<<"p1...."<<std::endl;
}
} ;
int _tmain( int argc, _TCHAR * argv[])
{
Inter* b = new Imp();
/**
* virtual ptr inter, in0, in1
**/
In0* in0 = (In0*)b->GetInter(0);
if ( in0 )
{
in0->P0();
}
return 0;
}