fork download
  1. #include <iostream>
  2.  
  3. class IA
  4. {
  5. public:
  6. virtual void start() = 0;
  7. };
  8.  
  9. template <int i> class B : public IA
  10. {
  11.  
  12. private:
  13.  
  14. static B* m_This;
  15.  
  16. public:
  17.  
  18. B()
  19. {
  20. m_This = this;
  21. }
  22.  
  23. virtual void start()
  24. {
  25. std::cout << "start at instance: " << m_This << std::endl;
  26. }
  27.  
  28. static void callback()
  29. {
  30. std::cout << "callback " << &callback << " at instance: " << m_This << std::endl;
  31. return;
  32. }
  33. };
  34.  
  35. B<0>* B<0>::m_This;
  36. B<1>* B<1>::m_This;
  37. B<2>* B<2>::m_This;
  38. B<3>* B<3>::m_This;
  39.  
  40. int main()
  41. {
  42. IA* k[4];
  43.  
  44. k[0] = new B<0>();
  45. k[1] = new B<1>();
  46. k[2] = new B<2>();
  47. k[3] = new B<3>();
  48.  
  49. for( int x=0; x<4; x++)
  50. k[x]->start();
  51.  
  52. // diese Aufrufe würden vom Treiber des Herstellers kommen
  53. B<0>::callback();
  54. B<1>::callback();
  55. B<2>::callback();
  56. B<3>::callback();
  57.  
  58. return 0;
  59. }
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
prog.cpp:35:5: error: specializing member 'B<0>::m_This' requires 'template<>' syntax
prog.cpp:36:5: error: specializing member 'B<1>::m_This' requires 'template<>' syntax
prog.cpp:37:5: error: specializing member 'B<2>::m_This' requires 'template<>' syntax
prog.cpp:38:5: error: specializing member 'B<3>::m_This' requires 'template<>' syntax
stdout
Standard output is empty