/*****************************************************************
Name :
Date : 2017/05/12
By : CharlotteHonG
Final: 2017/05/12
*****************************************************************/
#include <iostream>
using namespace std;
template <class T>
struct Base{
Base(int i=0): num(i){}
void interface(){
static_cast<T*>(this)->implementation();
}
// static void static_func(){
// T::static_sub_func();
// }
int num;
};
struct Derived : Base<Derived>{
Derived(int i=0):Base<Derived>(i){}
void implementation(){
cout << "num=" << num << endl;
}
// static void static_sub_func();
};
int main(int argc, char const *argv[]){
Base<Derived>* p = new Derived(10);
p->interface();
return 0;
}
LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCk5hbWUgOiAKRGF0ZSA6IDIwMTcvMDUvMTIKQnkgICA6IENoYXJsb3R0ZUhvbkcKRmluYWw6IDIwMTcvMDUvMTIKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiNpbmNsdWRlIDxpb3N0cmVhbT4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnRlbXBsYXRlIDxjbGFzcyBUPiAKc3RydWN0IEJhc2V7CiAgICBCYXNlKGludCBpPTApOiBudW0oaSl7fQogICAgdm9pZCBpbnRlcmZhY2UoKXsKICAgICAgICBzdGF0aWNfY2FzdDxUKj4odGhpcyktPmltcGxlbWVudGF0aW9uKCk7CiAgICB9CiAgICAvLyBzdGF0aWMgdm9pZCBzdGF0aWNfZnVuYygpewogICAgLy8gICAgIFQ6OnN0YXRpY19zdWJfZnVuYygpOwogICAgLy8gfQogICAgaW50IG51bTsKfTsKCnN0cnVjdCBEZXJpdmVkIDogQmFzZTxEZXJpdmVkPnsKICAgIERlcml2ZWQoaW50IGk9MCk6QmFzZTxEZXJpdmVkPihpKXt9CiAgICB2b2lkIGltcGxlbWVudGF0aW9uKCl7CiAgICAgICAgY291dCA8PCAibnVtPSIgPDwgbnVtIDw8IGVuZGw7CiAgICB9CiAgICAvLyBzdGF0aWMgdm9pZCBzdGF0aWNfc3ViX2Z1bmMoKTsKfTsKCmludCBtYWluKGludCBhcmdjLCBjaGFyIGNvbnN0ICphcmd2W10pewogICAgQmFzZTxEZXJpdmVkPiogcCA9IG5ldyBEZXJpdmVkKDEwKTsKICAgIHAtPmludGVyZmFjZSgpOwogICAgcmV0dXJuIDA7Cn0=