My template queue is below
template <typename T>
class LockingQueue
{
private:
std::queue<T> s_queue;
public:
void push(T const& value)
{}
T pop()
{}
};
And my template class is below
template <typename TaskData, typename TaskName>
class CommonMsg
{
public:
TaskData dataType;
TaskName taskName;
};
template <typename TaskData, typename TaskName>
using CommonMsgPtr = boost::shared_ptr<CommonMsg<TaskData, TaskName>>;
template <typename TaskData, typename TaskName>
using CommonMsgConstPtr = boost::shared_ptr<const CommonMsg<TaskData, TaskName>>;
I want to put the template class as the parameter of LockingQueue, e.g.
LockingQueue<CommonMsgConstPtr >. I know it is wrong. what should I do?
As far as I am aware, you can do this in two ways. In both ways you need to specialize your original class template so that it gets instantiated when you pass a smart pointer. The simplest way is option 1 (see code below), but you must specify the type in the main function. A bit dirtier approach is option 2 (see code below), but the call in the main function is cleaner and closer to your original post.
Btw, why
boost::shared_ptrand notstd::shared_ptr?Online example: https://ideone.com/h6o02M