fork download
  1. #include <stdio.h>
  2.  
  3.  
  4. class TraitsBase{
  5. protected:
  6.  
  7.  
  8. typedef void (TraitsBase::*fptr)();
  9. fptr ptr;
  10. TraitsBase(fptr p) : ptr(p){}
  11. public:
  12. void func1(){
  13. printf("func1\n");
  14. }
  15. void func2(){
  16. printf("func2\n");
  17. }
  18.  
  19. void call(){
  20. (this->*ptr)();
  21. }
  22. };
  23. template<class T> class Traits;
  24. template<> class Traits<int> : public TraitsBase{
  25. public:
  26. Traits<int>() : TraitsBase(&TraitsBase::func1){};
  27.  
  28. };
  29. template<> class Traits<float>: public TraitsBase{
  30. public:
  31. Traits<float>() : TraitsBase(&TraitsBase::func2){}
  32. };
  33. int main(){
  34. Traits<int> i;
  35. i.call();
  36. Traits<float> f;
  37. f.call();
  38.  
  39. }
Success #stdin #stdout 0.02s 2680KB
stdin
Standard input is empty
stdout
func1
func2