fork(1) download
  1. #include <iostream>
  2. #include <utility>
  3.  
  4. template<class T>
  5. class IQueue
  6. {
  7. protected:
  8. T Data[10];
  9. public:
  10. virtual const T pop() = 0;
  11. virtual void push(const T&) = 0;
  12. };
  13.  
  14. template<class T>
  15. class QueueA : public IQueue<T>
  16. {
  17. public:
  18. const T pop() final {
  19. std::cout << "pop queue A" << std::endl;
  20. return T{};
  21. }
  22.  
  23. void push(const T& aItemRef) final {
  24. std::cout << "PUSH queue A" << std::endl;
  25. }
  26. };
  27.  
  28. template<class T>
  29. class QueueB : public IQueue<T>
  30. {
  31. public:
  32. const T pop() final {
  33. std::cout << "pop queue B" << std::endl;
  34. return T{};
  35. }
  36.  
  37. void push(const T& aItemRef) final {
  38. std::cout << "PUSH queue B" << std::endl;
  39. }
  40. };
  41.  
  42. template<class T>
  43. void test_push_pop(IQueue<T>& aQueueP)
  44. {
  45. aQueueP.push(T{});
  46. aQueueP.pop();
  47. }
  48.  
  49. void test_push_pops()
  50. {
  51. }
  52.  
  53. template<class T, class... Ts>
  54. void test_push_pops(T&& aQueueP, Ts&&... aQueuePs)
  55. {
  56. test_push_pop(std::forward<T>(aQueueP));
  57. test_push_pops(aQueuePs...);
  58. };
  59.  
  60. template<class ... Ts>
  61. void tester_queues(Ts&&... args)
  62. {
  63. test_push_pops(args...);
  64. };
  65.  
  66. int main()
  67. {
  68. tester_queues( QueueA<int>{}, QueueB<char>{} );
  69. return 0;
  70. }
Success #stdin #stdout 0s 4304KB
stdin
Standard input is empty
stdout
PUSH queue A
pop queue A
PUSH queue B
pop queue B