#include <iostream>
#include <vector>
#include <typeinfo>
using namespace std;
template < typename T>
class fooBase
{
public :
void on1msTimer( ) { cout << "on1msTimer for " << typeid ( T) .name ( ) << endl; }
virtual ~fooBase( ) { } ; // for using type information
} ;
class foo
: public fooBase< uint8_t >
, public fooBase< uint16_t >
, public fooBase< float >
{
public :
void onTimer( )
{
fooBase< float > :: on1msTimer ( ) ;
fooBase< uint8_t > :: on1msTimer ( ) ;
fooBase< uint16_t > :: on1msTimer ( ) ;
}
using fooBase< float > :: on1msTimer ; // to make one of the 3 function the one for foo
~foo( ) { } // required because of virtual destructor in base class
} ;
int main( ) {
foo test;
cout << "Timer:" << endl;
test.onTimer ( ) ;
cout << "Explicit call of one of the base timer:" << endl;
test.fooBase < float > :: on1msTimer ( ) ;
cout << "Call of selected base timer made visible in foo:" << endl;
test.on1msTimer ( ) ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8dHlwZWluZm8+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpjbGFzcyBmb29CYXNlCnsKCXB1YmxpYzogCiAgICB2b2lkIG9uMW1zVGltZXIoKSB7IGNvdXQgPDwgIm9uMW1zVGltZXIgZm9yICI8PCB0eXBlaWQoVCkubmFtZSgpIDw8ZW5kbDsgfSAKICAgIHZpcnR1YWwgfmZvb0Jhc2UoKSB7fTsgIC8vIGZvciB1c2luZyB0eXBlIGluZm9ybWF0aW9uICAKfTsKCmNsYXNzIGZvbwogICAgOiBwdWJsaWMgZm9vQmFzZTx1aW50OF90PgogICAgLCBwdWJsaWMgZm9vQmFzZTx1aW50MTZfdD4KICAgICwgcHVibGljIGZvb0Jhc2U8ZmxvYXQ+CnsKCXB1YmxpYzoKICAgIHZvaWQgb25UaW1lcigpCiAgICB7CiAgICAgICAgIGZvb0Jhc2U8ZmxvYXQ+OjpvbjFtc1RpbWVyKCk7CiAgICAgICAgIGZvb0Jhc2U8dWludDhfdD46Om9uMW1zVGltZXIoKTsKICAgICAgICAgZm9vQmFzZTx1aW50MTZfdD46Om9uMW1zVGltZXIoKTsKICAgIH0KICAgIHVzaW5nIGZvb0Jhc2U8ZmxvYXQ+OjpvbjFtc1RpbWVyOyAgLy8gdG8gbWFrZSBvbmUgb2YgdGhlIDMgZnVuY3Rpb24gdGhlIG9uZSBmb3IgZm9vCiAgICB+Zm9vKCkge30gIC8vIHJlcXVpcmVkIGJlY2F1c2Ugb2YgdmlydHVhbCBkZXN0cnVjdG9yIGluIGJhc2UgY2xhc3MKfTsKCgppbnQgbWFpbigpIHsKICAgIGZvbyB0ZXN0OyAKICAgIGNvdXQgPDwgIlRpbWVyOiIgPDxlbmRsOyAKICAgIHRlc3Qub25UaW1lcigpOyAKICAgIGNvdXQgPDwgIkV4cGxpY2l0IGNhbGwgb2Ygb25lIG9mIHRoZSBiYXNlIHRpbWVyOiI8PGVuZGw7CiAgICB0ZXN0LmZvb0Jhc2U8ZmxvYXQ+OjpvbjFtc1RpbWVyKCk7CiAgICBjb3V0IDw8ICJDYWxsIG9mIHNlbGVjdGVkIGJhc2UgdGltZXIgbWFkZSB2aXNpYmxlIGluIGZvbzoiPDxlbmRsOyAKICAgIHRlc3Qub24xbXNUaW1lcigpOyAKfQ==