fork download
  1. #include <iostream>
  2. #include <cstdio>
  3.  
  4. //lets define few policy classes
  5. struct cout_print_policy
  6. {
  7. template<typename T>
  8. static void print(T const & data)
  9. {
  10. std::cout << "printing using cout = " << data << std::endl;
  11. }
  12. };
  13.  
  14. struct printf_print_policy
  15. {
  16. static void print(int data)
  17. {
  18. std::printf("printing int using printf = %d\n", data);
  19. }
  20. static void print(double data)
  21. {
  22. std::printf("printing double using printf = %f\n", data);
  23. }
  24. };
  25.  
  26. //now define the class template (called host class) that
  27. //accepts policy as template argument
  28. template<typename T, typename TPrintPolicy>
  29. class host
  30. {
  31. typedef TPrintPolicy print_policy;
  32. T data;
  33. public:
  34. host(T const & d) : data(d) {}
  35. void print()
  36. {
  37. print_policy::print(data);
  38. }
  39. };
  40.  
  41. //test code
  42. int main()
  43. {
  44. host<int, cout_print_policy> ic(100);
  45. host<double, cout_print_policy> dc(100.0);
  46.  
  47. host<int, printf_print_policy> ip(100);
  48. host<double, printf_print_policy> dp(100.0);
  49.  
  50. ic.print();
  51. dc.print();
  52. ip.print();
  53. dp.print();
  54. }
  55.  
  56.  
Success #stdin #stdout 0.02s 2724KB
stdin
Standard input is empty
stdout
printing using cout = 100
printing using cout = 100
printing int using printf = 100
printing double using printf = 100.000000