fork download
  1. #include <stdio.h>
  2.  
  3. //////////////////////////////////////////////
  4. // Specific case
  5. //////////////////////////////////////////////
  6. class CPassive
  7. {
  8. public:
  9. CPassive()
  10. {
  11. printf(" passively called ");
  12. }
  13. };
  14.  
  15. class CActive
  16. {
  17. private:
  18. static CPassive ms_passive;
  19. };
  20. CPassive CActive::ms_passive;
  21. ///////////////////////////////////////////////////////////
  22. // GENERIC TYPES
  23. ///////////////////////////////////////////////////////////
  24. class CSample
  25. {
  26. public:
  27. CSample()
  28. {
  29. printf("sample ");
  30. }
  31. };
  32.  
  33. template <typename T>
  34. class CGenericPassive
  35. {
  36. public:
  37. CGenericPassive()
  38. {
  39. T sample;
  40. printf(" generic passive .. ");
  41. }
  42. private:
  43. };
  44.  
  45. template <typename T>
  46. class CGenericActive
  47. {
  48. private:
  49. static CGenericPassive<T> ms_passive;
  50. public:
  51. CGenericActive()
  52. {
  53. // just reference it so it gets instantiated
  54. (void)ms_passive;
  55. }
  56.  
  57. };
  58. template<typename T>
  59. CGenericPassive<T> CGenericActive<T>::ms_passive;
  60.  
  61. int main(int argc, char** argv)
  62. {
  63. CActive activeExample; // instantiates the static member
  64. CGenericActive<CSample> activeExample2; // instantiated now
  65. }
Success #stdin #stdout 0s 3296KB
stdin
Standard input is empty
stdout
 passively called sample  generic passive ..