1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | #include <iostream> #include <typeinfo> using namespace std; template <typename Super> class A : public Super {}; template <typename Super> class B : public Super {}; template <typename Super> class C : public Super {}; class Blank{}; //---------------------------------------- struct null{}; template<typename> struct split { typedef null Ct; typedef null At; }; template<template<typename> class C, typename T> struct split<C<T> > { typedef C<null> Ct; //class template typedef T At; //argument type }; template<template<typename> class C> struct split<C<Blank> > { typedef C<null> Ct; //class template typedef Blank At; //argument type }; template<typename T, typename U> struct is_same { static const bool value = false; }; template<typename T> struct is_same<T,T> { static const bool value = true; }; typedef A<null> anull; typedef B<null> bnull; typedef C<null> cnull; //---------------------------------------- template <typename CombinedType> void printTypeComponents(const CombinedType & t) { typedef typename split<CombinedType>::Ct Ct; typedef typename split<CombinedType>::At At; if ( is_same<Ct,anull>::value ) cout << "A" << endl; else if ( is_same<Ct,bnull>::value ) cout << "B" << endl; else if ( is_same<Ct,cnull>::value ) cout << "C" << endl; if ( !is_same<At,Blank>::value ) printTypeComponents(At()); else cout << "Blank" << endl; } int main() { typedef A<B<C<Blank> > > ComposedType; ComposedType ct; printTypeComponents(ct); cout<<"-------"<<endl; typedef A<C<Blank> > ComposedType2; ComposedType2 ct2; printTypeComponents(ct2); } |
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZWluZm8+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgoKdGVtcGxhdGUgPHR5cGVuYW1lIFN1cGVyPiBjbGFzcyBBIDogcHVibGljIFN1cGVyIHt9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFN1cGVyPiBjbGFzcyBCIDogcHVibGljIFN1cGVyIHt9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFN1cGVyPiBjbGFzcyBDIDogcHVibGljIFN1cGVyIHt9OwoKY2xhc3MgQmxhbmt7fTsKCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKc3RydWN0IG51bGx7fTsKCnRlbXBsYXRlPHR5cGVuYW1lPiAKc3RydWN0IHNwbGl0CnsKICAgdHlwZWRlZiBudWxsIEN0OwogICB0eXBlZGVmIG51bGwgQXQ7Cn07Cgp0ZW1wbGF0ZTx0ZW1wbGF0ZTx0eXBlbmFtZT4gY2xhc3MgQywgdHlwZW5hbWUgVD4gCnN0cnVjdCBzcGxpdDxDPFQ+ID4KewogICB0eXBlZGVmIEM8bnVsbD4gQ3Q7IC8vY2xhc3MgdGVtcGxhdGUgCiAgIHR5cGVkZWYgVCAgICAgIEF0OyAgLy9hcmd1bWVudCB0eXBlCn07Cgp0ZW1wbGF0ZTx0ZW1wbGF0ZTx0eXBlbmFtZT4gY2xhc3MgQz4gCnN0cnVjdCBzcGxpdDxDPEJsYW5rPiA+CnsKICAgdHlwZWRlZiBDPG51bGw+IEN0OyAvL2NsYXNzIHRlbXBsYXRlIAogICB0eXBlZGVmIEJsYW5rICAgQXQ7ICAvL2FyZ3VtZW50IHR5cGUKfTsKCnRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+CnN0cnVjdCBpc19zYW1lCnsKICAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSBmYWxzZTsKfTsKdGVtcGxhdGU8dHlwZW5hbWUgVD4Kc3RydWN0IGlzX3NhbWU8VCxUPgp7CiAgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsKfTsKCnR5cGVkZWYgIEE8bnVsbD4gYW51bGw7CnR5cGVkZWYgIEI8bnVsbD4gYm51bGw7CnR5cGVkZWYgIEM8bnVsbD4gY251bGw7CgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCnRlbXBsYXRlIDx0eXBlbmFtZSBDb21iaW5lZFR5cGU+CnZvaWQgcHJpbnRUeXBlQ29tcG9uZW50cyhjb25zdCBDb21iaW5lZFR5cGUgJiB0KQp7CiAgICAgdHlwZWRlZiB0eXBlbmFtZSBzcGxpdDxDb21iaW5lZFR5cGU+OjpDdCBDdDsKICAgICB0eXBlZGVmIHR5cGVuYW1lIHNwbGl0PENvbWJpbmVkVHlwZT46OkF0IEF0OwoKICAgICBpZiAoIGlzX3NhbWU8Q3QsYW51bGw+Ojp2YWx1ZSApIAogICAgICAgICAgIGNvdXQgPDwgIkEiIDw8IGVuZGw7CiAgICAgZWxzZSBpZiAoIGlzX3NhbWU8Q3QsYm51bGw+Ojp2YWx1ZSApCiAgICAgICAgICAgY291dCA8PCAiQiIgPDwgZW5kbDsKICAgICBlbHNlIGlmICggaXNfc2FtZTxDdCxjbnVsbD46OnZhbHVlICkKICAgICAgICAgICBjb3V0IDw8ICJDIiA8PCBlbmRsOwoKICAgICBpZiAoICFpc19zYW1lPEF0LEJsYW5rPjo6dmFsdWUgKQogICAgICAgICAgIHByaW50VHlwZUNvbXBvbmVudHMoQXQoKSk7CiAgICAgZWxzZQogICAgICAgICAgIGNvdXQgPDwgIkJsYW5rIiA8PCBlbmRsOwp9CmludCBtYWluKCkKewogICAgIHR5cGVkZWYgQTxCPEM8Qmxhbms+ID4gPiBDb21wb3NlZFR5cGU7CiAgICAgQ29tcG9zZWRUeXBlIGN0OwogICAgIHByaW50VHlwZUNvbXBvbmVudHMoY3QpOwoKICAgICBjb3V0PDwiLS0tLS0tLSI8PGVuZGw7CgogICAgIHR5cGVkZWYgQTxDPEJsYW5rPiA+IENvbXBvc2VkVHlwZTI7CiAgICAgQ29tcG9zZWRUeXBlMiBjdDI7CiAgICAgcHJpbnRUeXBlQ29tcG9uZW50cyhjdDIpOwp9
-
upload with new input
-
result: Success time: 0s memory: 2724 kB returned value: 0
A B C Blank ------- A C Blank


