fork download
  1. #include <iostream>
  2.  
  3. template<class T>
  4. class CRTP
  5. {
  6. public:
  7. void Override() {}
  8.  
  9. void Call()
  10. {
  11. T* p = (T*)this;
  12. p->Override();
  13. }
  14. };
  15.  
  16.  
  17. class Super1 : public CRTP<Super1>
  18. {
  19. public:
  20. void Override()
  21. {
  22. std::cout << "Super1" << std::endl;
  23. }
  24. };
  25.  
  26. class Super2 : public CRTP<Super2>
  27. {
  28. public:
  29. void Override()
  30. {
  31. std::cout << "Super2" << std::endl;
  32. }
  33. };
  34.  
  35. int main()
  36. {
  37. Super1 s1;
  38. s1.Call();
  39.  
  40. Super2 s2;
  41. s2.Call();
  42. }
  43.  
Success #stdin #stdout 0s 3140KB
stdin
Standard input is empty
stdout
Super1
Super2