fork(1) download
  1. #include <iostream>
  2.  
  3. // interface
  4.  
  5. template<class Imp>
  6. class Interface{
  7. public:
  8. inline void print(void){
  9. std::cout<<"value: ";
  10. return asImp().print();
  11. }
  12. private:
  13. typedef Imp Implementation;
  14. inline Implementation& asImp(void){return static_cast<Implementation&>(*this);}
  15. };
  16.  
  17. // add
  18. class Add:public Interface<Add>{
  19. public:
  20. inline void print(void){std::cout<<value<<std::endl;++value;}
  21. private:
  22. int value;
  23. };
  24.  
  25. // main
  26. int main(void){
  27. Interface<Add> foo;
  28. foo.print();
  29. foo.print();
  30. }
Success #stdin #stdout 0s 3296KB
stdin
Standard input is empty
stdout
value: 76042423
value: 76042424