- 论坛徽章:
- 0
|
//
// relay_test.cpp
// ~~~~~~~~~~~~~~~~
//
// @author <zhuxueling@pica.com>
// @data 2008-12-24
#include<iostream>
using namespace std;
template< typename L, typename S>
class relation{
static long test(...);
static short test(S&);
static L& refL();
public:
enum { relay =( sizeof(test(refL())) == sizeof( short))};
enum { equal = ( relay && relation<S,L>::relay)};
enum { base_of = ( relay && !relation<S,L>::relay)};
};
class A{};
class B: public A{};
class C: public B{};
class D{};
int main(){
cout<< "B -> A? " << relation<B,A>::base_of <<endl;
cout<< "A -> B? " << relation<A,B>::base_of <<endl;
cout<< "C -> A? " << relation<C,A>::base_of <<endl;
cout<< "A -> C? " << relation<A,C>::base_of <<endl;
cout<< "D -> A? " << relation<D,A>::base_of <<endl;
cout<< "A -> D? " << relation<A,D>::base_of <<endl;
cout<< "A == A? " << relation<A,A>::equal <<endl;
cout<< "B == A? " << relation<B,A>::equal <<endl;
cout<< "B == B? " << relation<B,B>::equal <<endl;
return 0;
}
|
$ ./relya_test
B -> A? 1
A -> B? 0
C -> A? 1
A -> C? 0
D -> A? 0
A -> D? 0
A == A? 1
B == A? 0
B == B? 1
[ 本帖最后由 die 于 2008-12-24 19:56 编辑 ] |
|