fork download
  1. #include <iostream>
  2. #include <stdint.h>
  3. #include <thread>
  4. #include <list>
  5.  
  6. class ReaderA
  7. {
  8. public:
  9. ReaderA() {}
  10. ~ReaderA() {}
  11.  
  12. template <typename T>
  13. void read(std::list<T> *stack) = 0;
  14.  
  15. };
  16.  
  17. class Reader : public ReaderA
  18. {
  19. public:
  20. Reader() {}
  21. ~Reader() {}
  22.  
  23. template <typename T>
  24. void read(std::list<T> *stack)
  25. {
  26. std::cout << "i'm supposed to read";
  27. stack.push_back(1); //lets push some data
  28. }
  29.  
  30. };
  31.  
  32. class Caller
  33. {
  34. public:
  35. Caller(ReaderA *reader) : _reader(reader)
  36. {
  37.  
  38. }
  39.  
  40. ~Caller() {}
  41.  
  42. template <typename T>
  43. void call(std::list<T> *stack)
  44. {
  45. std::thread *thread = new std::thread(
  46. static_cast<void (ReaderA::*)(std::list<T> *)>(&ReaderA::read),
  47. _reader, stack);
  48. }
  49.  
  50. protected:
  51. ReaderA *_reader;
  52. };
  53.  
  54. int main()
  55. {
  56. Reader *r = new Reader();
  57. Caller *c = new Caller(r);
  58. std::list<uint32_t> *list = new std::list<uint32_t>();
  59.  
  60. c->call(list);
  61. return (0);
  62. }
  63.  
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
prog.cpp:13:38: error: templates may not be 'virtual'
     void read(std::list<T> *stack) = 0;
                                      ^
stdout
Standard output is empty