fork(2) download
  1. #include <iostream>
  2.  
  3.  
  4. enum ConvFactor {
  5. HZ = 1,
  6. KHZ = 1000,
  7. MHZ = 1000000,
  8. GHZ = 1000000000
  9. };
  10.  
  11. template <ConvFactor CF>
  12. class Frequency
  13. {
  14. public:
  15. explicit Frequency(double val)
  16. : val_(val / CF)
  17. {
  18. std::cout << " CF: " << CF << std::endl;
  19. }
  20.  
  21. template<ConvFactor LocalCF>
  22. explicit Frequency(Frequency<LocalCF> const & freq)
  23. : val_((freq.Val() * LocalCF) / CF)
  24. {
  25. std::cout << "LocalCF: " << LocalCF << " CF: " << CF << std::endl;
  26. }
  27.  
  28. //template<ConvFactor CF>
  29. Frequency<CF> operator*(double mult)
  30. {
  31. return Frequency<CF>(val_ * mult);
  32. }
  33.  
  34. double Val() const { return val_; }
  35. double operator()() { return val_; }
  36.  
  37. private:
  38. double val_;
  39. };
  40.  
  41. typedef Frequency<HZ> Hz;
  42. typedef Frequency<KHZ> KHz;
  43. typedef Frequency<MHZ> MHz;
  44. typedef Frequency<GHZ> GHz;
  45.  
  46.  
  47.  
  48. template<ConvFactor CF>
  49. Frequency<CF> doSomething(Frequency<CF> freq)
  50. {
  51. // return Frequency<CF>(freq * 2.0);
  52. return (freq * 2.0);
  53. }
  54.  
  55. //KHz doSomething2(KHz khz)
  56. //{
  57. // return khz *<KHZ> 2.0;
  58. //}
  59.  
  60. int main()
  61. {
  62. Hz hz = Hz(1000);
  63.  
  64. KHz khz = KHz(hz);
  65.  
  66. khz = KHz( doSomething<KHZ>(khz) );
  67. // khz = doSomething2(khz);
  68.  
  69. MHz mhz1 = MHz(hz);
  70. MHz mhz2 = MHz(khz);
  71.  
  72. GHz ghz1 = GHz(hz);
  73. GHz ghz2 = GHz(khz);
  74. GHz ghz3 = GHz(mhz1);
  75. GHz ghz4 = GHz(mhz2);
  76.  
  77. khz = doSomething(KHz(mhz2));
  78.  
  79. std::cout << hz() << " " << khz() << " " << mhz2() << " " << " " << ghz1() << std::endl;
  80. }
Success #stdin #stdout 0s 16064KB
stdin
Standard input is empty
stdout
  CF: 1
LocalCF: 1  CF: 1000
  CF: 1000
LocalCF: 1  CF: 1000000
LocalCF: 1000  CF: 1000000
LocalCF: 1  CF: 1000000000
LocalCF: 1000  CF: 1000000000
LocalCF: 1000000  CF: 1000000000
LocalCF: 1000000  CF: 1000000000
LocalCF: 1000000  CF: 1000
  CF: 1000
1000 4e-06 2e-06  1e-06