fork download
  1. #include <iostream>
  2. #include <queue>
  3. #include <memory>
  4.  
  5. template <typename T>
  6. struct LockingQueue
  7. {
  8. std::queue<T> s_queue;
  9. };
  10.  
  11. // Option 1
  12. template < typename CM, template<typename> class SP>
  13. struct LockingQueue<SP<CM>>
  14. {
  15. std::queue< SP<CM> > s_queue;
  16. };
  17.  
  18. // Option 2
  19. template < typename T, typename R, template<typename,typename> class CM, template<typename> class SP>
  20. struct LockingQueue<SP<CM<T,R>>>
  21. {
  22. std::queue< SP<CM<T,R>> > s_queue;
  23. };
  24.  
  25. template <typename TaskData, typename TaskName>
  26. struct CommonMsg
  27. {
  28. TaskData dataType;
  29. TaskName taskName;
  30. };
  31.  
  32. template <typename TaskData, typename TaskName>
  33. using CommonMsgPtr = std::shared_ptr<CommonMsg<TaskData, TaskName>>;
  34.  
  35. template <typename TaskData, typename TaskName>
  36. using CommonMsgConstPtr = std::shared_ptr<const CommonMsg<TaskData, TaskName>>;
  37.  
  38. // Option 1 alias
  39. template < typename CM, template<typename> class SP = std::shared_ptr>
  40. using CommonMsgConstSPtr1 = SP< const CM >;
  41.  
  42. // Option 2 alias
  43. template < typename TaskData = int, typename TaskName = char, template<typename,typename> class CM = CommonMsg, template<typename> class SP = std::shared_ptr>
  44. using CommonMsgConstSPtr2 = SP< const CM<TaskData, TaskName> >;
  45.  
  46. int main()
  47. {
  48. LockingQueue< CommonMsgConstSPtr1< CommonMsg<int,char> > > option1;
  49. LockingQueue< CommonMsgConstSPtr2<> > option2;
  50. }
Success #stdin #stdout 0.01s 5352KB
stdin
Standard input is empty
stdout
Standard output is empty